LCOV - code coverage report
Current view: top level - libreoffice/workdir/unxlngi6.pro/UnpackedTarball/mspub/src/lib - PolygonUtils.cpp (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 804 0.0 %
Date: 2012-12-17 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* libmspub
       3             :  * Version: MPL 1.1 / GPLv2+ / LGPLv2+
       4             :  *
       5             :  * The contents of this file are subject to the Mozilla Public License Version
       6             :  * 1.1 (the "License"); you may not use this file except in compliance with
       7             :  * the License or as specified alternatively below. You may obtain a copy of
       8             :  * the License at http://www.mozilla.org/MPL/
       9             :  *
      10             :  * Software distributed under the License is distributed on an "AS IS" basis,
      11             :  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
      12             :  * for the specific language governing rights and limitations under the
      13             :  * License.
      14             :  *
      15             :  * Major Contributor(s):
      16             :  * Copyright (C) 2012 Brennan Vincent <brennanv@email.arizona.edu>
      17             :  *
      18             :  * All Rights Reserved.
      19             :  *
      20             :  * For minor contributions see the git repository.
      21             :  *
      22             :  * Alternatively, the contents of this file may be used under the terms of
      23             :  * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
      24             :  * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
      25             :  * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
      26             :  * instead of those above.
      27             :  */
      28             : 
      29             : #include <stddef.h> // for NULL
      30             : #include <math.h>
      31             : 
      32             : #include <libwpg/libwpg.h>
      33             : 
      34             : #include "ShapeType.h"
      35             : #include "PolygonUtils.h"
      36             : #include "libmspub_utils.h"
      37             : #include "MSPUBCollector.h"
      38             : 
      39             : #define CALCULATED_VALUE(val) (int(unsigned(val) | 0x80000000))
      40             : 
      41             : #ifndef M_PI
      42             : #define M_PI 3.14159265358979323846
      43             : #endif
      44             : 
      45             : // FIXME: Do something better than the following workaround
      46             : #pragma GCC diagnostic ignored "-Wpragmas"
      47             : #pragma GCC diagnostic ignored "-Wuninitialized"
      48             : #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
      49             : 
      50             : using namespace libmspub;
      51             : 
      52             : const Vertex LINE_VERTICES[] =
      53             : {
      54             :   {0, 0}, {21600, 21600}
      55             : };
      56             : 
      57           0 : const CustomShape CS_LINE(
      58             :   LINE_VERTICES, sizeof(LINE_VERTICES) / sizeof(Vertex),
      59             :   NULL, 0,
      60             :   NULL, 0,
      61             :   NULL, 0,
      62             :   NULL, 0,
      63             :   21600, 21600,
      64             :   NULL, 0);
      65             : 
      66             : const Vertex WAVE_VERTICES[] =
      67             : {
      68             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}
      69             : };
      70             : 
      71             : const unsigned short WAVE_SEGMENTS[] =
      72             : {
      73             :   0x4000, 0x2001, 0x0001, 0x2001, 0x6000, 0x8000
      74             : };
      75             : 
      76             : const Calculation WAVE_CALC[] =
      77             : {
      78             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 15800, 0x400, 4460}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 7200, 0x40e}, {0x6000, 0x40c, 0x40e, 7200}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}
      79             : };
      80             : 
      81             : const TextRectangle WAVE_TRS[] =
      82             : {
      83             :   { {CALCULATED_VALUE(5), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(23)} }
      84             : };
      85             : 
      86             : const int WAVE_DEFAULT_ADJUST[] =
      87             : {
      88             :   1400, 10800
      89             : };
      90             : 
      91             : const Vertex WAVE_GLUE_POINTS[] =
      92             : {
      93             :   {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x14), 10800}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x15), 10800}
      94             : };
      95             : 
      96           0 : const CustomShape CS_WAVE(
      97             :   WAVE_VERTICES, sizeof(WAVE_VERTICES) / sizeof(Vertex),
      98             :   WAVE_SEGMENTS, sizeof(WAVE_SEGMENTS) / sizeof(unsigned short),
      99             :   WAVE_CALC, sizeof(WAVE_CALC) / sizeof(Calculation),
     100             :   WAVE_DEFAULT_ADJUST, sizeof(WAVE_DEFAULT_ADJUST) / sizeof(int),
     101             :   WAVE_TRS, sizeof(WAVE_TRS) / sizeof(TextRectangle),
     102             :   21600, 21600,
     103             :   WAVE_GLUE_POINTS, sizeof(WAVE_GLUE_POINTS) / sizeof(Vertex));
     104             : 
     105             : const Vertex FOLDED_CORNER_VERTICES[] =
     106             : {
     107             :   {0, 0}, {21600, 0}, {21600, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), 21600}, {0, 21600}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(11)}, {21600, CALCULATED_VALUE(0)}
     108             : };
     109             : 
     110             : const unsigned short FOLDED_CORNER_SEGMENTS[] =
     111             : {
     112             :   0x4000, 0x0004, 0x6001, 0x8000, 0x4000, 0x0001, 0x2001, 0x6001, 0x8000
     113             : };
     114             : 
     115             : const Calculation FOLDED_CORNER_CALC[] =
     116             : {
     117             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2001, 0x0401, 8000, 10800}, {0x8000, 21600, 0, 0x0402}, {0x2001, 0x0401, 1, 2}, {0x2001, 0x0401, 1, 4}, {0x2001, 0x0401, 1, 7}, {0x2001, 0x0401, 1, 16}, {0x6000, 0x0403, 0x405, 0}, {0x6000, 0x0400, 0x406, 0}, {0x8000, 21600, 0, 0x404}, {0x6000, 0x400, 0x407, 0}
     118             : };
     119             : 
     120             : const TextRectangle FOLDED_CORNER_TRS[] =
     121             : {
     122             :   { {0, 0}, {21600, CALCULATED_VALUE(11)} }
     123             : };
     124             : 
     125             : const int FOLDED_CORNER_DEFAULT_ADJUST[] =
     126             : {
     127             :   18900
     128             : };
     129             : 
     130             : const Vertex FOLDED_CORNER_GLUE_POINTS[] =
     131             : {
     132             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
     133             : };
     134             : 
     135           0 : const CustomShape CS_FOLDED_CORNER(
     136             :   FOLDED_CORNER_VERTICES, sizeof(FOLDED_CORNER_VERTICES) / sizeof(Vertex),
     137             :   FOLDED_CORNER_SEGMENTS, sizeof(FOLDED_CORNER_SEGMENTS) / sizeof(unsigned short),
     138             :   FOLDED_CORNER_CALC, sizeof(FOLDED_CORNER_CALC) / sizeof(Calculation),
     139             :   FOLDED_CORNER_DEFAULT_ADJUST, sizeof(FOLDED_CORNER_DEFAULT_ADJUST) / sizeof(int),
     140             :   FOLDED_CORNER_TRS, sizeof(FOLDED_CORNER_TRS) / sizeof(TextRectangle),
     141             :   21600, 21600,
     142             :   FOLDED_CORNER_GLUE_POINTS, sizeof(FOLDED_CORNER_GLUE_POINTS) / sizeof(Vertex));
     143             : 
     144             : 
     145             : const Vertex LEFT_ARROW_VERTICES[] =
     146             : {
     147             :   {21600, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), 0}, {0, 10800}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(2)}
     148             : };
     149             : 
     150             : const unsigned short LEFT_ARROW_SEGMENTS[] =
     151             : {
     152             :   0x4000, 0x0006, 0x6001, 0x8000
     153             : };
     154             : 
     155             : const Calculation LEFT_ARROW_CALC[] =
     156             : {
     157             :   {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x401}, {0x6001, 0x403, 0x400, 10800}, {0x6000, 0x401, 0x404, 0}, {0x6001, 0x401, 0x400, 10800}, {0xa000, 0x401, 0, 0x406}
     158             : };
     159             : 
     160             : const TextRectangle LEFT_ARROW_TRS[] =
     161             : {
     162             :   { {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {21600, CALCULATED_VALUE(2)} }
     163             : };
     164             : 
     165             : const int LEFT_ARROW_DEFAULT_ADJUST[] =
     166             : {
     167             :   5400, 5400
     168             : };
     169             : 
     170           0 : const CustomShape CS_LEFT_ARROW(
     171             :   LEFT_ARROW_VERTICES, sizeof(LEFT_ARROW_VERTICES) / sizeof(Vertex),
     172             :   LEFT_ARROW_SEGMENTS, sizeof(LEFT_ARROW_SEGMENTS) / sizeof(unsigned short),
     173             :   LEFT_ARROW_CALC, sizeof(LEFT_ARROW_CALC) / sizeof(Calculation),
     174             :   LEFT_ARROW_DEFAULT_ADJUST, sizeof(LEFT_ARROW_DEFAULT_ADJUST) / sizeof(int),
     175             :   LEFT_ARROW_TRS, sizeof(LEFT_ARROW_TRS) / sizeof(TextRectangle),
     176             :   21600, 21600,
     177             :   NULL, 0);
     178             : 
     179             : const Vertex UP_DOWN_ARROW_VERTICES[] =
     180             : {
     181             :   {0, CALCULATED_VALUE(1)}, {10800, 0}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {21600, CALCULATED_VALUE(3)}, {10800, 21600}, {0, CALCULATED_VALUE(3)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}
     182             : };
     183             : 
     184             : const unsigned short UP_DOWN_ARROW_SEGMENTS[] =
     185             : {
     186             :   0x4000, 0x0009, 0x6001, 0x8000
     187             : };
     188             : 
     189             : const Calculation UP_DOWN_ARROW_CALC[] =
     190             : {
     191             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x6001, PROP_ADJUST_VAL_FIRST, 0x404, 10800}, {0x8000, 21600, 0, 0x405}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x6001, PROP_ADJUST_VAL_FIRST + 1, 0x407, 10800}, {0x8000, 21600, 0, 0x408}
     192             : };
     193             : 
     194             : const TextRectangle UP_DOWN_ARROW_TRS[] =
     195             : {
     196             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(9)} }
     197             : };
     198             : 
     199             : const int UP_DOWN_ARROW_DEFAULT_ADJUST[] =
     200             : {
     201             :   5400, 4300
     202             : };
     203             : 
     204           0 : const CustomShape CS_UP_DOWN_ARROW(
     205             :   UP_DOWN_ARROW_VERTICES, sizeof(UP_DOWN_ARROW_VERTICES) / sizeof(Vertex),
     206             :   UP_DOWN_ARROW_SEGMENTS, sizeof(UP_DOWN_ARROW_SEGMENTS) / sizeof(unsigned short),
     207             :   UP_DOWN_ARROW_CALC, sizeof(UP_DOWN_ARROW_CALC) / sizeof(Calculation),
     208             :   UP_DOWN_ARROW_DEFAULT_ADJUST, sizeof(UP_DOWN_ARROW_DEFAULT_ADJUST) / sizeof(int),
     209             :   UP_DOWN_ARROW_TRS, sizeof(UP_DOWN_ARROW_TRS) / sizeof(TextRectangle),
     210             :   21600, 21600,
     211             :   NULL, 0);
     212             : 
     213             : const Vertex IRREGULAR_SEAL_1_VERTICES[] =
     214             : {
     215             :   {10901, 5905}, {8458, 2399}, {7417, 6425}, {476, 2399}, {4732, 7722}, {106, 8718}, {3828, 11880}, {243, 14689}, {5772, 14041}, {4868, 17719}, {7819, 15730}, {8590, 21600}, {10637, 15038}, {13349, 19840}, {14125, 14561}, {18248, 18195}, {16938, 13044}, {21600, 13393}, {17710, 10579}, {21198, 8242}, {16806, 7417}, {18482, 4560}, {14257, 5429}, {14623, 106}, {10901, 5905}
     216             : };
     217             : 
     218             : const TextRectangle IRREGULAR_SEAL_1_TRS[] =
     219             : {
     220             :   { {5400, 6570}, {14160, 15290} }
     221             : };
     222             : 
     223             : const Vertex IRREGULAR_SEAL_1_GLUE_POINTS[] =
     224             : {
     225             :   {9722, 1887}, {0, 12875}, {11614, 18844}, {21600, 6646}
     226             : };
     227             : 
     228           0 : const CustomShape CS_IRREGULAR_SEAL_1(
     229             :   IRREGULAR_SEAL_1_VERTICES, sizeof(IRREGULAR_SEAL_1_VERTICES) / sizeof(Vertex),
     230             :   NULL, 0,
     231             :   NULL, 0,
     232             :   NULL, 0,
     233             :   IRREGULAR_SEAL_1_TRS, sizeof(IRREGULAR_SEAL_1_TRS) / sizeof(TextRectangle),
     234             :   21600, 21600,
     235             :   IRREGULAR_SEAL_1_GLUE_POINTS, sizeof(IRREGULAR_SEAL_1_GLUE_POINTS) / sizeof(Vertex));
     236             : 
     237             : const Vertex LIGHTNING_BOLT_VERTICES[] =
     238             : {
     239             :   {8458, 0}, {0, 3923}, {7564, 8416}, {4993, 9720}, {12197, 13904}, {9987, 14934}, {21600, 21600}, {14768, 12911}, {16558, 12016}, {11030, 6840}, {12831, 6120}, {8458, 0}
     240             : };
     241             : 
     242             : const TextRectangle LIGHTNING_BOLT_TRS[] =
     243             : {
     244             :   { {8680, 7410}, {13970, 14190} }
     245             : };
     246             : 
     247             : const Vertex LIGHTNING_BOLT_GLUE_POINTS[] =
     248             : {
     249             :   {8458, 0}, {0, 3923}, {4993, 9720}, {9987, 14934}, {21600, 21600}, {16558, 12016}, {12831, 6120}
     250             : };
     251             : 
     252           0 : const CustomShape CS_LIGHTNING_BOLT(
     253             :   LIGHTNING_BOLT_VERTICES, sizeof(LIGHTNING_BOLT_VERTICES) / sizeof(Vertex),
     254             :   NULL, 0,
     255             :   NULL, 0,
     256             :   NULL, 0,
     257             :   LIGHTNING_BOLT_TRS, sizeof(LIGHTNING_BOLT_TRS) / sizeof(TextRectangle),
     258             :   21600, 21600,
     259             :   LIGHTNING_BOLT_GLUE_POINTS, sizeof(LIGHTNING_BOLT_GLUE_POINTS) / sizeof(Vertex));
     260             : 
     261             : const Vertex IRREGULAR_SEAL_2_VERTICES[] =
     262             : {
     263             :   {11464, 4340}, {9722, 1887}, {8548, 6383}, {4503, 3626}, {5373, 7816}, {1174, 8270}, {3934, 11592}, {0, 12875}, {3329, 15372}, {1283, 17824}, {4804, 18239}, {4918, 21600}, {7525, 18125}, {8698, 19712}, {9871, 17371}, {11614, 18844}, {12178, 15937}, {14943, 17371}, {14640, 14348}, {18878, 15632}, {16382, 12311}, {18270, 11292}, {16986, 9404}, {21600, 6646}, {16382, 6533}, {18005, 3172}, {14524, 5778}, {14789, 0}, {11464, 4340}
     264             : };
     265             : 
     266             : const TextRectangle IRREGULAR_SEAL_2_TRS[] =
     267             : {
     268             :   { {5400, 6570}, {14160, 15290} }
     269             : };
     270             : 
     271             : const Vertex IRREGULAR_SEAL_2_GLUE_POINTS[] =
     272             : {
     273             :   {9722, 1887}, {0, 12875}, {11614, 18844}, {21600, 6646}
     274             : };
     275             : 
     276           0 : const CustomShape CS_IRREGULAR_SEAL_2(
     277             :   IRREGULAR_SEAL_2_VERTICES, sizeof(IRREGULAR_SEAL_2_VERTICES) / sizeof(Vertex),
     278             :   NULL, 0,
     279             :   NULL, 0,
     280             :   NULL, 0,
     281             :   IRREGULAR_SEAL_2_TRS, sizeof(IRREGULAR_SEAL_2_TRS) / sizeof(TextRectangle),
     282             :   21600, 21600,
     283             :   IRREGULAR_SEAL_2_GLUE_POINTS, sizeof(IRREGULAR_SEAL_2_GLUE_POINTS) / sizeof(Vertex));
     284             : 
     285             : 
     286             : const Vertex HEART_VERTICES[] =
     287             : {
     288             :   {10800, 21599}, {321, 6886}, {70, 6036}, {-9, 5766}, {-1, 5474}, {2, 5192}, {6, 4918}, {43, 4641}, {101, 4370}, {159, 4103}, {245, 3837}, {353, 3582}, {460, 3326}, {591, 3077}, {741, 2839}, {892, 2598}, {1066, 2369}, {1253, 2155}, {1443, 1938}, {1651, 1732}, {1874, 1543}, {2097, 1351}, {2337, 1174}, {2587, 1014}, {2839, 854}, {3106, 708}, {3380, 584}, {3656, 459}, {3945, 350}, {4237, 264}, {4533, 176}, {4838, 108}, {5144, 66}, {5454, 22}, {5771, 1}, {6086, 3}, {6407, 7}, {6731, 35}, {7048, 89}, {7374, 144}, {7700, 226}, {8015, 335}, {8344, 447}, {8667, 590}, {8972, 756}, {9297, 932}, {9613, 1135}, {9907, 1363}, {10224, 1609}, {10504, 1900}, {10802, 2169}, {11697, 1363}, {11971, 1116}, {12304, 934}, {12630, 756}, {12935, 590}, {13528, 450}, {13589, 335}, {13901, 226}, {14227, 144}, {14556, 89}, {14872, 35}, {15195, 7}, {15517, 3}, {15830, 0}, {16147, 22}, {16458, 66}, {16764, 109}, {17068, 177}, {17365, 264}, {17658, 349}, {17946, 458}, {18222, 584}, {18496, 708}, {18762, 854}, {19015, 1014}, {19264, 1172}, {19504, 1349}, {19730, 1543}, {19950, 1731}, {20158, 1937}, {20350, 2155}, {20536, 2369}, {20710, 2598}, {20861, 2839}, {21010, 3074}, {21143, 3323}, {21251, 3582}, {21357, 3835}, {21443, 4099}, {21502, 4370}, {21561, 4639}, {21595, 4916}, {21600, 5192}, {21606, 5474}, {21584, 5760}, {21532, 6036}, {21478, 6326}, {21366, 6603}, {21282, 6887}, {10802, 21602}
     289             : };
     290             : 
     291             : const unsigned short HEART_SEGMENTS[] =
     292             : {
     293             :   0x4000, 0x0002, 0x2010, 0x0001, 0x2010, 0x0001, 0x6001, 0x8000
     294             : };
     295             : 
     296             : const TextRectangle HEART_TRS[] =
     297             : {
     298             :   { {5080, 2540}, {16520, 13550} }
     299             : };
     300             : 
     301             : const Vertex HEART_GLUE_POINTS[] =
     302             : {
     303             :   {10800, 2180}, {3090, 10800}, {10800, 21600}, {18490, 10800}
     304             : };
     305             : 
     306           0 : const CustomShape CS_HEART(
     307             :   HEART_VERTICES, sizeof(HEART_VERTICES) / sizeof(Vertex),
     308             :   HEART_SEGMENTS, sizeof(HEART_SEGMENTS) / sizeof(unsigned short),
     309             :   NULL, 0,
     310             :   NULL, 0,
     311             :   HEART_TRS, sizeof(HEART_TRS) / sizeof(TextRectangle),
     312             :   21600, 21600,
     313             :   HEART_GLUE_POINTS, sizeof(HEART_GLUE_POINTS) / sizeof(Vertex));
     314             : 
     315             : const Vertex QUAD_ARROW_VERTICES[] =
     316             : {
     317             :   {0, 10800}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {10800, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(1)}, {21600, 10800}, {CALCULATED_VALUE(5), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(5)}, {10800, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(3)}
     318             : };
     319             : 
     320             : const unsigned short QUAD_ARROW_SEGMENTS[] =
     321             : {
     322             :   0x4000, 0x0017, 0x6001, 0x8000
     323             : };
     324             : 
     325             : const Calculation QUAD_ARROW_CALC[] =
     326             : {
     327             :   {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 2}
     328             : };
     329             : 
     330             : const TextRectangle QUAD_ARROW_TRS[] =
     331             : {
     332             :   { {0, 0}, {21600, 21600} }
     333             : };
     334             : 
     335             : const int QUAD_ARROW_DEFAULT_ADJUST[] =
     336             : {
     337             :   6500, 8600, 4300
     338             : };
     339             : 
     340           0 : const CustomShape CS_QUAD_ARROW(
     341             :   QUAD_ARROW_VERTICES, sizeof(QUAD_ARROW_VERTICES) / sizeof(Vertex),
     342             :   QUAD_ARROW_SEGMENTS, sizeof(QUAD_ARROW_SEGMENTS) / sizeof(unsigned short),
     343             :   QUAD_ARROW_CALC, sizeof(QUAD_ARROW_CALC) / sizeof(Calculation),
     344             :   QUAD_ARROW_DEFAULT_ADJUST, sizeof(QUAD_ARROW_DEFAULT_ADJUST) / sizeof(int),
     345             :   QUAD_ARROW_TRS, sizeof(QUAD_ARROW_TRS) / sizeof(TextRectangle),
     346             :   21600, 21600,
     347             :   NULL, 0);
     348             : 
     349             : const Vertex BEVEL_VERTICES[] =
     350             : {
     351             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}
     352             : };
     353             : 
     354             : const unsigned short BEVEL_SEGMENTS[] =
     355             : {
     356             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
     357             : };
     358             : 
     359             : const Calculation BEVEL_CALC[] =
     360             : {
     361             :   {0x2001, PROP_ADJUST_VAL_FIRST, 21599, 21600}, {0xa000, PROP_GEO_RIGHT, 0, 0x400}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}
     362             : };
     363             : 
     364             : const TextRectangle BEVEL_TRS[] =
     365             : {
     366             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)} }
     367             : };
     368             : 
     369             : const int BEVEL_DEFAULT_ADJUST[] =
     370             : {
     371             :   2700
     372             : };
     373             : 
     374           0 : const CustomShape CS_BEVEL(
     375             :   BEVEL_VERTICES, sizeof(BEVEL_VERTICES) / sizeof(Vertex),
     376             :   BEVEL_SEGMENTS, sizeof(BEVEL_SEGMENTS) / sizeof(unsigned short),
     377             :   BEVEL_CALC, sizeof(BEVEL_CALC) / sizeof(Calculation),
     378             :   BEVEL_DEFAULT_ADJUST, sizeof(BEVEL_DEFAULT_ADJUST) / sizeof(int),
     379             :   BEVEL_TRS, sizeof(BEVEL_TRS) / sizeof(TextRectangle),
     380             :   21600, 21600,
     381             :   NULL, 0);
     382             : 
     383             : const Vertex LEFT_BRACKET_VERTICES[] =
     384             : {
     385             :   {21600, 0}, {10800, 0}, {0, CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(4)}, {10800, 21600}, {21600, 21600}
     386             : };
     387             : 
     388             : const unsigned short LEFT_BRACKET_SEGMENTS[] =
     389             : {
     390             :   0x4000, 0x2001, 0x0001, 0x2001, 0x8000
     391             : };
     392             : 
     393             : const Calculation LEFT_BRACKET_CALC[] =
     394             : {
     395             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x6000, PROP_GEO_TOP, 0x400, 0}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}
     396             : };
     397             : 
     398             : const TextRectangle LEFT_BRACKET_TRS[] =
     399             : {
     400             :   { {6350, CALCULATED_VALUE(3)}, {21600, CALCULATED_VALUE(4)} }
     401             : };
     402             : 
     403             : const int LEFT_BRACKET_DEFAULT_ADJUST[] =
     404             : {
     405             :   1800
     406             : };
     407             : 
     408             : const Vertex LEFT_BRACKET_GLUE_POINTS[] =
     409             : {
     410             :   {21600, 0}, {0, 10800}, {21600, 21600}
     411             : };
     412             : 
     413           0 : const CustomShape CS_LEFT_BRACKET(
     414             :   LEFT_BRACKET_VERTICES, sizeof(LEFT_BRACKET_VERTICES) / sizeof(Vertex),
     415             :   LEFT_BRACKET_SEGMENTS, sizeof(LEFT_BRACKET_SEGMENTS) / sizeof(unsigned short),
     416             :   LEFT_BRACKET_CALC, sizeof(LEFT_BRACKET_CALC) / sizeof(Calculation),
     417             :   LEFT_BRACKET_DEFAULT_ADJUST, sizeof(LEFT_BRACKET_DEFAULT_ADJUST) / sizeof(int),
     418             :   LEFT_BRACKET_TRS, sizeof(LEFT_BRACKET_TRS) / sizeof(TextRectangle),
     419             :   21600, 21600,
     420             :   LEFT_BRACKET_GLUE_POINTS, sizeof(LEFT_BRACKET_GLUE_POINTS) / sizeof(Vertex));
     421             : 
     422             : const Vertex RIGHT_BRACKET_VERTICES[] =
     423             : {
     424             :   {0, 0}, {10800, 0}, {21600, CALCULATED_VALUE(3)}, {21600, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(4)}, {10800, 21600}, {0, 21600}
     425             : };
     426             : 
     427             : const unsigned short RIGHT_BRACKET_SEGMENTS[] =
     428             : {
     429             :   0x4000, 0x2001, 0x0001, 0x2001, 0x8000
     430             : };
     431             : 
     432             : const Calculation RIGHT_BRACKET_CALC[] =
     433             : {
     434             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x6000, PROP_GEO_TOP, 0x400, 0}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}
     435             : };
     436             : 
     437             : const TextRectangle RIGHT_BRACKET_TRS[] =
     438             : {
     439             :   { {0, CALCULATED_VALUE(3)}, {15150, CALCULATED_VALUE(4)} }
     440             : };
     441             : 
     442             : const int RIGHT_BRACKET_DEFAULT_ADJUST[] =
     443             : {
     444             :   1800
     445             : };
     446             : 
     447             : const Vertex RIGHT_BRACKET_GLUE_POINTS[] =
     448             : {
     449             :   {0, 0}, {0, 21600}, {21600, 10800}
     450             : };
     451             : 
     452           0 : const CustomShape CS_RIGHT_BRACKET(
     453             :   RIGHT_BRACKET_VERTICES, sizeof(RIGHT_BRACKET_VERTICES) / sizeof(Vertex),
     454             :   RIGHT_BRACKET_SEGMENTS, sizeof(RIGHT_BRACKET_SEGMENTS) / sizeof(unsigned short),
     455             :   RIGHT_BRACKET_CALC, sizeof(RIGHT_BRACKET_CALC) / sizeof(Calculation),
     456             :   RIGHT_BRACKET_DEFAULT_ADJUST, sizeof(RIGHT_BRACKET_DEFAULT_ADJUST) / sizeof(int),
     457             :   RIGHT_BRACKET_TRS, sizeof(RIGHT_BRACKET_TRS) / sizeof(TextRectangle),
     458             :   21600, 21600,
     459             :   RIGHT_BRACKET_GLUE_POINTS, sizeof(RIGHT_BRACKET_GLUE_POINTS) / sizeof(Vertex));
     460             : 
     461             : const Vertex LEFT_BRACE_VERTICES[] =
     462             : {
     463             :   {21600, 0}, {16200, 0}, {10800, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(1)}, {10800, CALCULATED_VALUE(2)}, {10800, CALCULATED_VALUE(3)}, {5400, CALCULATED_VALUE(4)}, {0, CALCULATED_VALUE(4)}, {5400, CALCULATED_VALUE(4)}, {10800, CALCULATED_VALUE(5)}, {10800, CALCULATED_VALUE(6)}, {10800, CALCULATED_VALUE(7)}, {10800, CALCULATED_VALUE(8)}, {16200, 21600}, {21600, 21600}
     464             : };
     465             : 
     466             : const unsigned short LEFT_BRACE_SEGMENTS[] =
     467             : {
     468             :   0x4000, 0x2001, 0x0001, 0x2002, 0x0001, 0x2001, 0x8000
     469             : };
     470             : 
     471             : const Calculation LEFT_BRACE_CALC[] =
     472             : {
     473             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0xa000, 0x404, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x404, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x6000, 0x404, 0x400, 0}, {0x6000, 0x404, PROP_ADJUST_VAL_FIRST, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, 0x400}, {0x2001, PROP_ADJUST_VAL_FIRST, 10000, 31953}, {0x8000, 21600, 0, 0x409}
     474             : };
     475             : 
     476             : const TextRectangle LEFT_BRACE_TRS[] =
     477             : {
     478             :   { {13800, CALCULATED_VALUE(9)}, {21600, CALCULATED_VALUE(10)} }
     479             : };
     480             : 
     481             : const int LEFT_BRACE_DEFAULT_ADJUST[] =
     482             : {
     483             :   1800, 10800
     484             : };
     485             : 
     486             : const Vertex LEFT_BRACE_GLUE_POINTS[] =
     487             : {
     488             :   {21600, 0}, {0, 10800}, {21600, 21600}
     489             : };
     490             : 
     491           0 : const CustomShape CS_LEFT_BRACE(
     492             :   LEFT_BRACE_VERTICES, sizeof(LEFT_BRACE_VERTICES) / sizeof(Vertex),
     493             :   LEFT_BRACE_SEGMENTS, sizeof(LEFT_BRACE_SEGMENTS) / sizeof(unsigned short),
     494             :   LEFT_BRACE_CALC, sizeof(LEFT_BRACE_CALC) / sizeof(Calculation),
     495             :   LEFT_BRACE_DEFAULT_ADJUST, sizeof(LEFT_BRACE_DEFAULT_ADJUST) / sizeof(int),
     496             :   LEFT_BRACE_TRS, sizeof(LEFT_BRACE_TRS) / sizeof(TextRectangle),
     497             :   21600, 21600,
     498             :   LEFT_BRACE_GLUE_POINTS, sizeof(LEFT_BRACE_GLUE_POINTS) / sizeof(Vertex));
     499             : 
     500             : const Vertex RIGHT_BRACE_VERTICES[] =
     501             : {
     502             :   {0, 0}, {5400, 0}, {10800, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(1)}, {10800, CALCULATED_VALUE(2)}, {10800, CALCULATED_VALUE(3)}, {16200, CALCULATED_VALUE(4)}, {21600, CALCULATED_VALUE(4)}, {16200, CALCULATED_VALUE(4)}, {10800, CALCULATED_VALUE(5)}, {10800, CALCULATED_VALUE(6)}, {10800, CALCULATED_VALUE(7)}, {10800, CALCULATED_VALUE(8)}, {5400, 21600}, {0, 21600}
     503             : };
     504             : 
     505             : const unsigned short RIGHT_BRACE_SEGMENTS[] =
     506             : {
     507             :   0x4000, 0x2001, 0x0001, 0x2002, 0x0001, 0x2001, 0x8000
     508             : };
     509             : 
     510             : const Calculation RIGHT_BRACE_CALC[] =
     511             : {
     512             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0xa000, 0x404, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x404, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x6000, 0x404, 0x400, 0}, {0x6000, 0x404, PROP_ADJUST_VAL_FIRST, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, 0x400}, {0x2001, PROP_ADJUST_VAL_FIRST, 10000, 31953}, {0x8000, 21600, 0, 0x409}
     513             : };
     514             : 
     515             : const TextRectangle RIGHT_BRACE_TRS[] =
     516             : {
     517             :   { {0, CALCULATED_VALUE(9)}, {7800, CALCULATED_VALUE(10)} }
     518             : };
     519             : 
     520             : const int RIGHT_BRACE_DEFAULT_ADJUST[] =
     521             : {
     522             :   1800, 10800
     523             : };
     524             : 
     525             : const Vertex RIGHT_BRACE_GLUE_POINTS[] =
     526             : {
     527             :   {0, 0}, {0, 21600}, {21600, 10800}
     528             : };
     529             : 
     530           0 : const CustomShape CS_RIGHT_BRACE(
     531             :   RIGHT_BRACE_VERTICES, sizeof(RIGHT_BRACE_VERTICES) / sizeof(Vertex),
     532             :   RIGHT_BRACE_SEGMENTS, sizeof(RIGHT_BRACE_SEGMENTS) / sizeof(unsigned short),
     533             :   RIGHT_BRACE_CALC, sizeof(RIGHT_BRACE_CALC) / sizeof(Calculation),
     534             :   RIGHT_BRACE_DEFAULT_ADJUST, sizeof(RIGHT_BRACE_DEFAULT_ADJUST) / sizeof(int),
     535             :   RIGHT_BRACE_TRS, sizeof(RIGHT_BRACE_TRS) / sizeof(TextRectangle),
     536             :   21600, 21600,
     537             :   RIGHT_BRACE_GLUE_POINTS, sizeof(RIGHT_BRACE_GLUE_POINTS) / sizeof(Vertex));
     538             : 
     539             : const Vertex LEFT_UP_ARROW_VERTICES[] =
     540             : {
     541             :   {0, CALCULATED_VALUE(5)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(5), 0}, {21600, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 21600}
     542             : };
     543             : 
     544             : const unsigned short LEFT_UP_ARROW_SEGMENTS[] =
     545             : {
     546             :   0x4000, 0x000b, 0x6001, 0x8000
     547             : };
     548             : 
     549             : const Calculation LEFT_UP_ARROW_CALC[] =
     550             : {
     551             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST, 0x0404, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x6000, PROP_ADJUST_VAL_FIRST, 0x0406, 0}, {0x8000, 21600, 0, 0x406}, {0xa000, 0x408, 0, 0x406}
     552             : };
     553             : 
     554             : const TextRectangle LEFT_UP_ARROW_TRS[] =
     555             : {
     556             :   { {CALCULATED_VALUE(2), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)} }, { {CALCULATED_VALUE(7), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)} }
     557             : };
     558             : 
     559             : const int LEFT_UP_ARROW_DEFAULT_ADJUST[] =
     560             : {
     561             :   9340, 18500, 6200
     562             : };
     563             : 
     564           0 : const CustomShape CS_LEFT_UP_ARROW(
     565             :   LEFT_UP_ARROW_VERTICES, sizeof(LEFT_UP_ARROW_VERTICES) / sizeof(Vertex),
     566             :   LEFT_UP_ARROW_SEGMENTS, sizeof(LEFT_UP_ARROW_SEGMENTS) / sizeof(unsigned short),
     567             :   LEFT_UP_ARROW_CALC, sizeof(LEFT_UP_ARROW_CALC) / sizeof(Calculation),
     568             :   LEFT_UP_ARROW_DEFAULT_ADJUST, sizeof(LEFT_UP_ARROW_DEFAULT_ADJUST) / sizeof(int),
     569             :   LEFT_UP_ARROW_TRS, sizeof(LEFT_UP_ARROW_TRS) / sizeof(TextRectangle),
     570             :   21600, 21600,
     571             :   NULL, 0);
     572             : 
     573             : const Vertex SMILEY_FACE_VERTICES[] =
     574             : {
     575             :   {10800, 10800}, {10800, 10800}, {0, 360}, {7305, 7515}, {1165, 1165}, {0, 360}, {14295, 7515}, {1165, 1165}, {0, 360}, {4870, CALCULATED_VALUE(1)}, {8680, CALCULATED_VALUE(2)}, {12920, CALCULATED_VALUE(2)}, {16730, CALCULATED_VALUE(1)}
     576             : };
     577             : 
     578             : const unsigned short SMILEY_FACE_SEGMENTS[] =
     579             : {
     580             :   0xa203, 0x6000, 0x8000, 0xa203, 0x6000, 0x8000, 0xa203, 0x6000, 0x8000, 0x4000, 0x2001, 0xaa00, 0x8000
     581             : };
     582             : 
     583             : const Calculation SMILEY_FACE_CALC[] =
     584             : {
     585             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 15510}, {0x8000, 17520, 0, 0x400}, {0x4000, 15510, 0x400, 0}
     586             : };
     587             : 
     588             : const TextRectangle SMILEY_FACE_TRS[] =
     589             : {
     590             :   { {3163, 3163}, {18437, 18437} }
     591             : };
     592             : 
     593             : const int SMILEY_FACE_DEFAULT_ADJUST[] =
     594             : {
     595             :   17520
     596             : };
     597             : 
     598             : const Vertex SMILEY_FACE_GLUE_POINTS[] =
     599             : {
     600             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
     601             : };
     602             : 
     603             : const Vertex VERTICAL_SCROLL_VERTICES[] =
     604             : {
     605             :   {CALCULATED_VALUE(1), 21600}, {0, CALCULATED_VALUE(11)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(4), 0}, {CALCULATED_VALUE(2), 0}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(5), 21600}, {CALCULATED_VALUE(6), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(1), 21600}, {0, CALCULATED_VALUE(11)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(4), 0}, {CALCULATED_VALUE(6), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}
     606             : };
     607             : 
     608             : const unsigned short VERTICAL_SCROLL_SEGMENTS[] =
     609             : {
     610             :   0x4000, 0xa702, 0x0002, 0xa801, 0x0001, 0xa702, 0x0002, 0xa801, 0x6001, 0x8000, 0x4000, 0xa801, 0xa702, 0x6000, 0x8000, 0x4000, 0xa803, 0xa702, 0x6001, 0x8000, 0x4000, 0xa701, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
     611             : };
     612             : 
     613             : const Calculation VERTICAL_SCROLL_CALC[] =
     614             : {
     615             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 1, 2}, {0xa000, PROP_GEO_RIGHT, 0, 0x401}, {0xa000, PROP_GEO_RIGHT, 0, 0x400}, {0x6000, 0x400, 0x401, 0}, {0xa000, PROP_GEO_RIGHT, 0, 0x404}, {0x2001, 0x400, 2, 1}, {0x2001, 0x401, 1, 2}, {0x6000, 0x400, 0x407, 0}, {0x6000, 0x401, 0x407, 0}, {0xa000, PROP_GEO_BOTTOM, 0, 0x409}, {0xa000, PROP_GEO_BOTTOM, 0, 0x401}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}, {0xa000, PROP_GEO_BOTTOM, 0, 0x404}
     616             : };
     617             : 
     618             : const TextRectangle VERTICAL_SCROLL_TRS[] =
     619             : {
     620             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(12)} }
     621             : };
     622             : 
     623             : const int VERTICAL_SCROLL_DEFAULT_ADJUST[] =
     624             : {
     625             :   2700
     626             : };
     627             : 
     628             : const Vertex HORIZONTAL_SCROLL_VERTICES[] =
     629             : {
     630             :   {0, CALCULATED_VALUE(4)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}, {21600, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(13)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(1), 21600}, {0, CALCULATED_VALUE(11)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(6)}, {0, CALCULATED_VALUE(4)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(11)}
     631             : };
     632             : 
     633             : const unsigned short HORIZONTAL_SCROLL_SEGMENTS[] =
     634             : {
     635             :   0x4000, 0xa801, 0x0002, 0xa802, 0x0001, 0xa801, 0x0002, 0xa802, 0x6001, 0x8000, 0x4000, 0xa803, 0x6000, 0x8000, 0x4000, 0xa803, 0xa702, 0x6000, 0x8000, 0x4000, 0xa701, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
     636             : };
     637             : 
     638             : const Calculation HORIZONTAL_SCROLL_CALC[] =
     639             : {
     640             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 1, 2}, {0xa000, PROP_GEO_RIGHT, 0, 0x401}, {0xa000, PROP_GEO_RIGHT, 0, 0x400}, {0x6000, 0x400, 0x401, 0}, {0xa000, PROP_GEO_RIGHT, 0, 0x404}, {0x2001, 0x400, 2, 1}, {0x2001, 0x401, 1, 2}, {0x6000, 0x400, 0x407, 0}, {0x6000, 0x401, 0x407, 0}, {0xa000, PROP_GEO_BOTTOM, 0, 0x409}, {0xa000, PROP_GEO_BOTTOM, 0, 0x401}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}, {0xa000, PROP_GEO_BOTTOM, 0, 0x404}
     641             : };
     642             : 
     643             : const TextRectangle HORIZONTAL_SCROLL_TRS[] =
     644             : {
     645             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(12)} }
     646             : };
     647             : 
     648             : const int HORIZONTAL_SCROLL_DEFAULT_ADJUST[] =
     649             : {
     650             :   2700
     651             : };
     652             : 
     653             : const Vertex CIRCULAR_ARROW_VERTICES[] =
     654             : {
     655             :   {CALCULATED_VALUE(0x03), CALCULATED_VALUE(0x03)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x11), CALCULATED_VALUE(0x10)}, {0, 0}, {21600, 21600}, {CALCULATED_VALUE(0x09), CALCULATED_VALUE(0x08)}, {CALCULATED_VALUE(0x0B), CALCULATED_VALUE(0x0A)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x17)}, {CALCULATED_VALUE(0x2F), CALCULATED_VALUE(0x2E)}, {CALCULATED_VALUE(0x1D), CALCULATED_VALUE(0x1C)}
     656             : };
     657             : 
     658             : const unsigned short CIRCULAR_ARROW_SEGMENTS[] =
     659             : {
     660             :   0xa404, 0xa504, 0x0003, 0x6001, 0x8000
     661             : };
     662             : 
     663             : const Calculation CIRCULAR_ARROW_CALC[] =
     664             : {
     665             :   {0x2000, 0x0147, 0x0000, 0x0000}, {0x2000, 0x0148, 0x0000, 0x0000}, {0x2000, 0x0149, 0x0000, 0x0000}, {0x4000, 0x2A30, 0x0149, 0x0000}, {0x4009, 0x2A30, 0x0147, 0x0000}, {0x400A, 0x2A30, 0x0147, 0x0000}, {0x4009, 0x2A30, 0x0148, 0x0000}, {0x400A, 0x2A30, 0x0148, 0x0000}, {0x2000, 0x0404, 0x2A30, 0x0000}, {0x2000, 0x0405, 0x2A30, 0x0000}, {0x2000, 0x0406, 0x2A30, 0x0000}, {0x2000, 0x0407, 0x2A30, 0x0000}, {0x6009, 0x0403, 0x0147, 0x0000}, {0x600A, 0x0403, 0x0147, 0x0000}, {0x6009, 0x0403, 0x0148, 0x0000}, {0x600A, 0x0403, 0x0148, 0x0000}, {0x2000, 0x040C, 0x2A30, 0x0000}, {0x2000, 0x040D, 0x2A30, 0x0000}, {0x2000, 0x040E, 0x2A30, 0x0000}, {0x2000, 0x040F, 0x2A30, 0x0000}, {0x8000, 0x5460, 0x0000, 0x0403}, {0x4009, 0x34BC, 0x0148, 0x0000}, {0x400A, 0x34BC, 0x0148, 0x0000}, {0x2000, 0x0415, 0x2A30, 0x0000}, {0x2000, 0x0416, 0x2A30, 0x0000}, {0x2000, 0x0149, 0x0000, 0x0A8C}, {0x6009, 0x0419, 0x0148, 0x0000}, {0x600A, 0x0419, 0x0148, 0x0000}, {0x2000, 0x041A, 0x2A30, 0x0000}, {0x2000, 0x041B, 0x2A30, 0x0000}, {0xA000, 0x041D, 0x0000, 0x0418}, {0xA000, 0x041D, 0x0000, 0x0418}, {0x6001, 0x041E, 0x041F, 0x0001}, {0xA000, 0x041C, 0x0000, 0x0417}, {0xA000, 0x041C, 0x0000, 0x0417}, {0x6001, 0x0421, 0x0422, 0x0001}, {0x6000, 0x0420, 0x0423, 0x0000}, {0x200D, 0x0424, 0x0000, 0x0000}, {0x200E, 0x0148, 0x002D, 0x0000}, {0x6009, 0x0425, 0x0426, 0x0000}, {0x200E, 0x0148, 0x002D, 0x0000}, {0x600A, 0x0425, 0x0428, 0x0000}, {0x000E, 0x0000, 0x002D, 0x0000}, {0x6009, 0x0427, 0x042A, 0x0000}, {0x000E, 0x0000, 0x002D, 0x0000}, {0x6009, 0x0429, 0x042C, 0x0000}, {0x6000, 0x041C, 0x042B, 0x0000}, {0x6000, 0x041D, 0x042D, 0x0000}
     666             : };
     667             : 
     668             : const TextRectangle CIRCULAR_ARROW_TRS[] =
     669             : {
     670             :   { {0, 0}, {21600, 21600} }
     671             : };
     672             : 
     673             : const int CIRCULAR_ARROW_DEFAULT_ADJUST[] =
     674             : {
     675             :   180 << 16, 0, 5550
     676             : };
     677             : 
     678           0 : const CustomShape CS_CIRCULAR_ARROW(
     679             :   CIRCULAR_ARROW_VERTICES, sizeof(CIRCULAR_ARROW_VERTICES) / sizeof(Vertex),
     680             :   CIRCULAR_ARROW_SEGMENTS, sizeof(CIRCULAR_ARROW_SEGMENTS) / sizeof(unsigned short),
     681             :   CIRCULAR_ARROW_CALC, sizeof(CIRCULAR_ARROW_CALC) / sizeof(Calculation),
     682             :   CIRCULAR_ARROW_DEFAULT_ADJUST, sizeof(CIRCULAR_ARROW_DEFAULT_ADJUST) / sizeof(int),
     683             :   CIRCULAR_ARROW_TRS, sizeof(CIRCULAR_ARROW_TRS) / sizeof(TextRectangle),
     684             :   21600, 21600,
     685             :   NULL, 0, 1 | 2);
     686             : 
     687             : const Vertex U_TURN_ARROW_VERTICES[] =
     688             : {
     689             :   {0, 21600}, {0, 8550}, {0, 3540}, {4370, 0}, {9270, 0}, {13890, 0}, {18570, 3230}, {18600, 8300}, {21600, 8300}, {15680, 14260}, {9700, 8300}, {12500, 8300}, {12320, 6380}, {10870, 5850}, {9320, 5850}, {7770, 5850}, {6040, 6410}, {6110, 8520}, {6110, 21600}
     690             : };
     691             : 
     692             : const unsigned short U_TURN_ARROW_SEGMENTS[] =
     693             : {
     694             :   0x4000, 0x0001, 0x2002, 0x0004, 0x2002, 0x0001, 0x6000, 0x8000
     695             : };
     696             : 
     697             : const TextRectangle U_TURN_ARROW_TRS[] =
     698             : {
     699             :   { {0, 8280}, {6110, 21600} }
     700             : };
     701             : 
     702           0 : const CustomShape CS_U_TURN_ARROW(
     703             :   U_TURN_ARROW_VERTICES, sizeof(U_TURN_ARROW_VERTICES) / sizeof(Vertex),
     704             :   U_TURN_ARROW_SEGMENTS, sizeof(U_TURN_ARROW_SEGMENTS) / sizeof(unsigned short),
     705             :   NULL, 0,
     706             :   NULL, 0,
     707             :   U_TURN_ARROW_TRS, sizeof(U_TURN_ARROW_TRS) / sizeof(TextRectangle),
     708             :   21600, 21600,
     709             :   NULL, 0);
     710             : 
     711             : const Vertex CURVED_RIGHT_ARROW_VERTICES[] =
     712             : {
     713             :   {0, 0}, {CALCULATED_VALUE(23), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(22), 0}, {0, CALCULATED_VALUE(4)}, {0, CALCULATED_VALUE(15)}, {CALCULATED_VALUE(23), CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(7)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(12)}, {0, 0}, {CALCULATED_VALUE(23), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(26), CALCULATED_VALUE(17)}, {0, CALCULATED_VALUE(15)}, {CALCULATED_VALUE(23), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(26), CALCULATED_VALUE(17)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(15)}, {0, 0}, {CALCULATED_VALUE(23), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(22), 0}, {0, CALCULATED_VALUE(4)}, {0, 0}, {CALCULATED_VALUE(23), CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(4)}, {CALCULATED_VALUE(26), CALCULATED_VALUE(17)}, {0, CALCULATED_VALUE(15)}, {CALCULATED_VALUE(23), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(26), CALCULATED_VALUE(17)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(15)}
     714             : };
     715             : 
     716             : const unsigned short CURVED_RIGHT_ARROW_SEGMENTS[] =
     717             : {
     718             :   0xa404, 0xA304, 0x0003, 0xa508, 0x6000, 0x8000, 0xa404, 0xa304, 0xa504, 0x6000, 0x8000
     719             : };
     720             : 
     721             : const Calculation CURVED_RIGHT_ARROW_CALC[] =
     722             : {
     723             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0xa000, PROP_ADJUST_VAL_FIRST, 21600, PROP_ADJUST_VAL_FIRST + 1}, {0x2001, 0x403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0xe000, 0x405, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x406, 1, 2}, {0x4002, 21600, PROP_ADJUST_VAL_FIRST, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 2}, {0xa00f, 0x409, 21600, 0x404}, {0x6000, 0x404, 0x40a, 0}, {0x6000, 0x40b, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6000, 0x407, 0x40a, 0}, {0xa000, 0x40c, 21600, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x405, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x40f, 1, 2}, {0x6002, 0x404, 0x407, 0}, {0x6000, PROP_ADJUST_VAL_FIRST, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x2001, 0x412, 1, 2}, {0xa000, 0x411, 0, 0x413}, {0x0000, 21600, 0, 0}, {0x0000, 21600, 0, 0}, {0x0001, 21600, 2, 1}, {0xa000, 0x411, 0, 0x404}, {0x600f, 0x418, 0x404, 21600}, {0x8000, 21600, 0, 0x419}, {0x2000, 0x408, 128, 0}, {0x2001, 0x405, 1, 2}, {0x2000, 0x405, 0, 128}, {0xe000, PROP_ADJUST_VAL_FIRST, 0x411, 0x40c}, {0x600f, 0x414, 0x404, 21600}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x420, 1, 2}, {0x0001, 21600, 21600, 1}, {0x6001, 0x409, 0x409, 1}, {0xa000, 0x422, 0, 0x423}, {0x200d, 0x424, 0, 0}, {0x2000, 0x425, 21600, 0}, {0x8001, 21600, 21600, 0x426}, {0x2000, 0x427, 64, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x600f, 0x421, 0x429, 21600}, {0x8000, 21600, 0, 0x42a}, {0x2000, 0x42b, 64, 0}, {0x2001, 0x404, 1, 2}, {0xa000, PROP_ADJUST_VAL_FIRST + 1, 0, 0x42d}, {0x0001, 21600, 2195, 16384}, {0x0001, 21600, 14189, 16384}
     724             : };
     725             : 
     726             : const TextRectangle CURVED_RIGHT_ARROW_TRS[] =
     727             : {
     728             :   { {CALCULATED_VALUE(47), CALCULATED_VALUE(45)}, {CALCULATED_VALUE(48), CALCULATED_VALUE(46)} }
     729             : };
     730             : 
     731             : const int CURVED_RIGHT_ARROW_DEFAULT_ADJUST[] =
     732             : {
     733             :   12960, 19440, 14400
     734             : };
     735             : 
     736             : const Vertex CURVED_RIGHT_ARROW_GLUE_POINTS[] =
     737             : {
     738             :   {0, CALCULATED_VALUE(17)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(16)}
     739             : };
     740             : 
     741           0 : const CustomShape CS_CURVED_RIGHT_ARROW(
     742             :   CURVED_RIGHT_ARROW_VERTICES, sizeof(CURVED_RIGHT_ARROW_VERTICES) / sizeof(Vertex),
     743             :   CURVED_RIGHT_ARROW_SEGMENTS, sizeof(CURVED_RIGHT_ARROW_SEGMENTS) / sizeof(unsigned short),
     744             :   CURVED_RIGHT_ARROW_CALC, sizeof(CURVED_RIGHT_ARROW_CALC) / sizeof(Calculation),
     745             :   CURVED_RIGHT_ARROW_DEFAULT_ADJUST, sizeof(CURVED_RIGHT_ARROW_DEFAULT_ADJUST) / sizeof(int),
     746             :   CURVED_RIGHT_ARROW_TRS, sizeof(CURVED_RIGHT_ARROW_TRS) / sizeof(TextRectangle),
     747             :   21600, 21600,
     748             :   CURVED_RIGHT_ARROW_GLUE_POINTS, sizeof(CURVED_RIGHT_ARROW_GLUE_POINTS) / sizeof(Vertex));
     749             : 
     750             : const Vertex CURVED_LEFT_ARROW_VERTICES[] =
     751             : {
     752             :   {CALCULATED_VALUE(22), 0}, {CALCULATED_VALUE(21), CALCULATED_VALUE(3)}, {0, 0}, {CALCULATED_VALUE(21), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(13)}, {0, CALCULATED_VALUE(8)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(22), 0}, {CALCULATED_VALUE(21), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(16)}, {0, CALCULATED_VALUE(14)}, {CALCULATED_VALUE(22), 0}, {CALCULATED_VALUE(21), CALCULATED_VALUE(3)}, {0, 0}, {CALCULATED_VALUE(21), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(16)}, {0, CALCULATED_VALUE(14)}
     753             : };
     754             : 
     755             : const unsigned short CURVED_LEFT_ARROW_SEGMENTS[] =
     756             : {
     757             :   0xa608, 0x0003, 0xa308, 0x6000, 0x8000, 0xa604, 0xa308, 0x6000, 0x8000
     758             : };
     759             : 
     760             : const Calculation CURVED_LEFT_ARROW_CALC[] =
     761             : {
     762             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0xa000, PROP_ADJUST_VAL_FIRST, 21600, PROP_ADJUST_VAL_FIRST + 1}, {0x2001, 0x403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0xe000, 0x405, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x406, 1, 2}, {0x4002, 21600, PROP_ADJUST_VAL_FIRST, 0}, {0xa00f, PROP_ADJUST_VAL_FIRST + 2, 21600, 0x404}, {0x6000, 0x404, 0x409, 0}, {0x6000, 0x40a, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6000, 0x407, 0x409, 0}, {0xa000, 0x40b, 21600, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x405, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x40e, 1, 2}, {0x6002, 0x404, 0x407, 0}, {0x6000, PROP_ADJUST_VAL_FIRST, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x2001, 0x411, 1, 2}, {0xa000, 0x410, 0, 0x412}, {0x0000, 21600, 0, 0}, {0x0000, 21600, 0, 0}, {0x0000, 0, 0, 21600}, {0xa000, 0x410, 0, 0x404}, {0x600f, 0x417, 0x404, 21600}, {0x2000, 0x408, 128, 0}, {0x2001, 0x405, 1, 2}, {0x2000, 0x405, 0, 128}, {0xe000, PROP_ADJUST_VAL_FIRST, 0x410, 0x40b}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x41d, 1, 2}, {0x0001, 21600, 21600, 1}, {0x6001, PROP_ADJUST_VAL_FIRST + 2, PROP_ADJUST_VAL_FIRST + 2, 1}, {0xa000, 0x41f, 0, 0x420}, {0x200d, 0x421, 0, 0}, {0x2000, 0x422, 21600, 0}, {0x8001, 21600, 21600, 0x423}, {0x2000, 0x424, 64, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x600f, 0x41e, 0x426, 21600}, {0x2000, 0x427, 0, 64}, {0x2001, 0x404, 1, 2}, {0xa000, PROP_ADJUST_VAL_FIRST + 1, 0, 0x429}, {0x0001, 21600, 2195, 16384}, {0x0001, 21600, 14189, 16384}
     763             : };
     764             : 
     765             : const TextRectangle CURVED_LEFT_ARROW_TRS[] =
     766             : {
     767             :   { {CALCULATED_VALUE(43), CALCULATED_VALUE(41)}, {CALCULATED_VALUE(44), CALCULATED_VALUE(42)} }
     768             : };
     769             : 
     770             : const int CURVED_LEFT_ARROW_DEFAULT_ADJUST[] =
     771             : {
     772             :   12960, 19440, 7200
     773             : };
     774             : 
     775             : const Vertex CURVED_LEFT_ARROW_GLUE_POINTS[] =
     776             : {
     777             :   {0, CALCULATED_VALUE(15)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(11)}, {0, CALCULATED_VALUE(8)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(16)}
     778             : };
     779             : 
     780             : 
     781             : const Vertex CURVED_DOWN_ARROW_VERTICES[] =
     782             : {
     783             :   {0, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(23)}, {0, CALCULATED_VALUE(22)}, {CALCULATED_VALUE(4), 0}, {CALCULATED_VALUE(15), 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(7), 0}, {CALCULATED_VALUE(13), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(2)}, {0, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(15), 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(22)}, {0, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(23)}, {0, CALCULATED_VALUE(22)}, {CALCULATED_VALUE(4), 0}, {0, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(4), 0}, {CALCULATED_VALUE(17), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(15), 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(22)}
     784             : };
     785             : 
     786             : const unsigned short CURVED_DOWN_ARROW_SEGMENTS[] =
     787             : {
     788             :   0xa604, 0xa504, 0x0003, 0xa308, 0x6000, 0x8000, 0xa604, 0xa504, 0xa304, 0x6000, 0x8000
     789             : };
     790             : 
     791             : const Calculation CURVED_DOWN_ARROW_CALC[] =
     792             : {
     793             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0xa000, PROP_ADJUST_VAL_FIRST, 21600, PROP_ADJUST_VAL_FIRST + 1}, {0x2001, 0x403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0xe000, 0x405, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x406, 1, 2}, {0x4002, 21600, PROP_ADJUST_VAL_FIRST, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 2}, {0xa00f, 0x409, 21600, 0x404}, {0x6000, 0x404, 0x40a, 0}, {0x6000, 0x40b, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6000, 0x407, 0x40a, 0}, {0xa000, 0x40c, 21600, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x405, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x40f, 1, 2}, {0x6002, 0x404, 0x407, 0}, {0x6000, PROP_ADJUST_VAL_FIRST, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x2001, 0x412, 1, 2}, {0xa000, 0x411, 0, 0x413}, {0x0000, 21600, 0, 0}, {0x0000, 21600, 0, 0}, {0x0001, 21600, 2, 1}, {0xa000, 0x411, 0, 0x404}, {0x600f, 0x418, 0x404, 21600}, {0x8000, 21600, 0, 0x419}, {0x2000, 0x408, 128, 0}, {0x2001, 0x405, 1, 2}, {0x2000, 0x405, 0, 128}, {0xe000, PROP_ADJUST_VAL_FIRST, 0x411, 0x40c}, {0x600f, 0x414, 0x404, 21600}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x420, 1, 2}, {0x0001, 21600, 21600, 1}, {0x6001, 0x409, 0x409, 1}, {0xa000, 0x422, 0, 0x423}, {0x200d, 0x424, 0, 0}, {0x2000, 0x425, 21600, 0}, {0x8001, 21600, 21600, 0x426}, {0x2000, 0x427, 64, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x600f, 0x421, 0x429, 21600}, {0x8000, 21600, 0, 0x42a}, {0x2000, 0x42b, 64, 0}, {0x2001, 0x404, 1, 2}, {0xa000, PROP_ADJUST_VAL_FIRST + 1, 0, 0x42d}, {0x0001, 21600, 2195, 16384}, {0x0001, 21600, 14189, 16384}
     794             : };
     795             : 
     796             : const TextRectangle CURVED_DOWN_ARROW_TRS[] =
     797             : {
     798             :   { {CALCULATED_VALUE(45), CALCULATED_VALUE(47)}, {CALCULATED_VALUE(46), CALCULATED_VALUE(48)} }
     799             : };
     800             : 
     801             : const int CURVED_DOWN_ARROW_DEFAULT_ADJUST[] =
     802             : {
     803             :   12960, 19440, 14400
     804             : };
     805             : 
     806             : const Vertex CURVED_DOWN_ARROW_GLUE_POINTS[] =
     807             : {
     808             :   {CALCULATED_VALUE(17), 0}, {CALCULATED_VALUE(16), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(2)}
     809             : };
     810             : 
     811           0 : const CustomShape CS_CURVED_DOWN_ARROW(
     812             :   CURVED_DOWN_ARROW_VERTICES, sizeof(CURVED_DOWN_ARROW_VERTICES) / sizeof(Vertex),
     813             :   CURVED_DOWN_ARROW_SEGMENTS, sizeof(CURVED_DOWN_ARROW_SEGMENTS) / sizeof(unsigned short),
     814             :   CURVED_DOWN_ARROW_CALC, sizeof(CURVED_DOWN_ARROW_CALC) / sizeof(Calculation),
     815             :   CURVED_DOWN_ARROW_DEFAULT_ADJUST, sizeof(CURVED_DOWN_ARROW_DEFAULT_ADJUST) / sizeof(int),
     816             :   CURVED_DOWN_ARROW_TRS, sizeof(CURVED_DOWN_ARROW_TRS) / sizeof(TextRectangle),
     817             :   21600, 21600,
     818             :   CURVED_DOWN_ARROW_GLUE_POINTS, sizeof(CURVED_DOWN_ARROW_GLUE_POINTS) / sizeof(Vertex));
     819             : 
     820             : const Vertex FLOW_CHART_PREDEFINED_PROCESS_VERTICES[] =
     821             : {
     822             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {2540, 0}, {2540, 21600}, {21600 - 2540, 0}, {21600 - 2540, 21600}
     823             : };
     824             : 
     825             : const unsigned short FLOW_CHART_PREDEFINED_PROCESS_SEGMENTS[] =
     826             : {
     827             :   0x4000, 0x0003, 0x6000, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
     828             : };
     829             : 
     830             : const TextRectangle FLOW_CHART_PREDEFINED_PROCESS_TRS[] =
     831             : {
     832             :   { {2540, 0}, {21600 - 2540, 21600} }
     833             : };
     834             : 
     835             : const Vertex FLOW_CHART_INTERNAL_STORAGE_VERTICES[] =
     836             : {
     837             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {4230, 0}, {4230, 21600}, {0, 4230}, {21600, 4230}
     838             : };
     839             : 
     840             : const unsigned short FLOW_CHART_INTERNAL_STORAGE_SEGMENTS[] =
     841             : {
     842             :   0x4000, 0x0003, 0x6000, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
     843             : };
     844             : 
     845             : const TextRectangle FLOW_CHART_INTERNAL_STORAGE_TRS[] =
     846             : {
     847             :   { {4230, 4230}, {21600, 21600} }
     848             : };
     849             : 
     850           0 : const CustomShape CS_FLOW_CHART_INTERNAL_STORAGE(
     851             :   FLOW_CHART_INTERNAL_STORAGE_VERTICES, sizeof(FLOW_CHART_INTERNAL_STORAGE_VERTICES) / sizeof(Vertex),
     852             :   FLOW_CHART_INTERNAL_STORAGE_SEGMENTS, sizeof(FLOW_CHART_INTERNAL_STORAGE_SEGMENTS) / sizeof(unsigned short),
     853             :   NULL, 0,
     854             :   NULL, 0,
     855             :   FLOW_CHART_INTERNAL_STORAGE_TRS, sizeof(FLOW_CHART_INTERNAL_STORAGE_TRS) / sizeof(TextRectangle),
     856             :   21600, 21600,
     857             :   NULL, 0);
     858             : 
     859             : const Vertex FLOW_CHART_DOCUMENT_VERTICES[] =
     860             : {
     861             :   {0, 0}, {21600, 0}, {21600, 17360}, {13050, 17220}, {13340, 20770}, {5620, 21600}, {2860, 21100}, {1850, 20700}, {0, 20120}
     862             : };
     863             : 
     864             : const unsigned short FLOW_CHART_DOCUMENT_SEGMENTS[] =
     865             : {
     866             :   0x4000, 0x0002, 0x2002, 0x6000, 0x8000
     867             : };
     868             : 
     869             : const TextRectangle FLOW_CHART_DOCUMENT_TRS[] =
     870             : {
     871             :   { {0, 0}, {21600, 17360} }
     872             : };
     873             : 
     874             : const Vertex FLOW_CHART_DOCUMENT_GLUE_POINTS[] =
     875             : {
     876             :   {10800, 0}, {0, 10800}, {10800, 20320}, {21600, 10800}
     877             : };
     878             : 
     879           0 : const CustomShape CS_FLOW_CHART_DOCUMENT(
     880             :   FLOW_CHART_DOCUMENT_VERTICES, sizeof(FLOW_CHART_DOCUMENT_VERTICES) / sizeof(Vertex),
     881             :   FLOW_CHART_DOCUMENT_SEGMENTS, sizeof(FLOW_CHART_DOCUMENT_SEGMENTS) / sizeof(unsigned short),
     882             :   NULL, 0,
     883             :   NULL, 0,
     884             :   FLOW_CHART_DOCUMENT_TRS, sizeof(FLOW_CHART_DOCUMENT_TRS) / sizeof(TextRectangle),
     885             :   21600, 21600,
     886             :   FLOW_CHART_DOCUMENT_GLUE_POINTS, sizeof(FLOW_CHART_DOCUMENT_GLUE_POINTS) / sizeof(Vertex));
     887             : 
     888             : const Vertex FLOW_CHART_MULTI_DOCUMENT_VERTICES[] =
     889             : {
     890             :   {0, 3600}, {1500, 3600}, {1500, 1800}, {3000, 1800}, {3000, 0}, {21600, 0}, {21600, 14409}, {21600 - 1500, 14409}, {21600 - 1500, 14409 + 1800}, {21600 - 3000, 14409 + 1800}, {21600 - 3000, 14409 + 3600}, {11610, 14293 + 3600}, {11472, 17239 + 3600}, {4833, 17928 + 3600}, {2450, 17513 + 3600}, {1591, 17181 + 3600}, {0, 16700 + 3600}, {1500, 3600}, {21600 - 3000, 3600}, {21600 - 3000, 14409 + 1800}, {3000, 1800}, {21600 - 1500, 1800}, {21600 - 1500, 14409}
     891             : };
     892             : 
     893             : const unsigned short FLOW_CHART_MULTI_DOCUMENT_SEGMENTS[] =
     894             : {
     895             :   0x4000, 0x000a, 0x2002, 0x6000, 0x8000, 0x4000, 0xaa00, 0x0002, 0x8000, 0x4000, 0xaa00, 0x0002, 0x8000
     896             : };
     897             : 
     898             : const TextRectangle FLOW_CHART_MULTI_DOCUMENT_TRS[] =
     899             : {
     900             :   { {0, 3600}, {21600 - 3600, 14409 + 3600} }
     901             : };
     902             : 
     903             : const Vertex FLOW_CHART_MULTI_DOCUMENT_GLUE_POINTS[] =
     904             : {
     905             :   {10800, 0}, {0, 10800}, {10800, 19890}, {21600, 10800}
     906             : };
     907             : 
     908           0 : const CustomShape CS_FLOW_CHART_MULTI_DOCUMENT(
     909             :   FLOW_CHART_MULTI_DOCUMENT_VERTICES, sizeof(FLOW_CHART_MULTI_DOCUMENT_VERTICES) / sizeof(Vertex),
     910             :   FLOW_CHART_MULTI_DOCUMENT_SEGMENTS, sizeof(FLOW_CHART_MULTI_DOCUMENT_SEGMENTS) / sizeof(unsigned short),
     911             :   NULL, 0,
     912             :   NULL, 0,
     913             :   FLOW_CHART_MULTI_DOCUMENT_TRS, sizeof(FLOW_CHART_MULTI_DOCUMENT_TRS) / sizeof(TextRectangle),
     914             :   21600, 21600,
     915             :   FLOW_CHART_MULTI_DOCUMENT_GLUE_POINTS, sizeof(FLOW_CHART_MULTI_DOCUMENT_GLUE_POINTS) / sizeof(Vertex));
     916             : 
     917             : const Vertex FLOW_CHART_TERMINATOR_VERTICES[] =
     918             : {
     919             :   {3470, 21600}, {0, 10800}, {3470, 0}, {18130, 0}, {21600, 10800}, {18130, 21600}
     920             : };
     921             : 
     922             : const unsigned short FLOW_CHART_TERMINATOR_SEGMENTS[] =
     923             : {
     924             :   0x4000, 0xa702, 0x0001, 0xa702, 0x6000, 0x8000
     925             : };
     926             : 
     927             : const TextRectangle FLOW_CHART_TERMINATOR_TRS[] =
     928             : {
     929             :   { {1060, 3180}, {20540, 18420} }
     930             : };
     931             : 
     932             : const Vertex FLOW_CHART_TERMINATOR_GLUE_POINTS[] =
     933             : {
     934             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
     935             : };
     936             : 
     937           0 : const CustomShape CS_FLOW_CHART_TERMINATOR(
     938             :   FLOW_CHART_TERMINATOR_VERTICES, sizeof(FLOW_CHART_TERMINATOR_VERTICES) / sizeof(Vertex),
     939             :   FLOW_CHART_TERMINATOR_SEGMENTS, sizeof(FLOW_CHART_TERMINATOR_SEGMENTS) / sizeof(unsigned short),
     940             :   NULL, 0,
     941             :   NULL, 0,
     942             :   FLOW_CHART_TERMINATOR_TRS, sizeof(FLOW_CHART_TERMINATOR_TRS) / sizeof(TextRectangle),
     943             :   21600, 21600,
     944             :   FLOW_CHART_TERMINATOR_GLUE_POINTS, sizeof(FLOW_CHART_TERMINATOR_GLUE_POINTS) / sizeof(Vertex));
     945             : 
     946           0 : const CustomShape CS_FLOW_CHART_PREDEFINED_PROCESS(
     947             :   FLOW_CHART_PREDEFINED_PROCESS_VERTICES, sizeof(FLOW_CHART_PREDEFINED_PROCESS_VERTICES) / sizeof(Vertex),
     948             :   FLOW_CHART_PREDEFINED_PROCESS_SEGMENTS, sizeof(FLOW_CHART_PREDEFINED_PROCESS_SEGMENTS) / sizeof(unsigned short),
     949             :   NULL, 0,
     950             :   NULL, 0,
     951             :   FLOW_CHART_PREDEFINED_PROCESS_TRS, sizeof(FLOW_CHART_PREDEFINED_PROCESS_TRS) / sizeof(TextRectangle),
     952             :   21600, 21600,
     953             :   NULL, 0);
     954             : 
     955             : const Vertex FLOW_CHART_IO_VERTICES[] =
     956             : {
     957             :   {4230, 0}, {21600, 0}, {17370, 21600}, {0, 21600}, {4230, 0}
     958             : };
     959             : 
     960             : const TextRectangle FLOW_CHART_IO_TRS[] =
     961             : {
     962             :   { {4230, 0}, {17370, 21600} }
     963             : };
     964             : 
     965             : const Vertex FLOW_CHART_IO_GLUE_POINTS[] =
     966             : {
     967             :   {12960, 0}, {10800, 0}, {2160, 10800}, {8600, 21600}, {10800, 21600}, {19400, 10800}
     968             : };
     969             : 
     970           0 : const CustomShape CS_FLOW_CHART_IO(
     971             :   FLOW_CHART_IO_VERTICES, sizeof(FLOW_CHART_IO_VERTICES) / sizeof(Vertex),
     972             :   NULL, 0,
     973             :   NULL, 0,
     974             :   NULL, 0,
     975             :   FLOW_CHART_IO_TRS, sizeof(FLOW_CHART_IO_TRS) / sizeof(TextRectangle),
     976             :   21600, 21600,
     977             :   FLOW_CHART_IO_GLUE_POINTS, sizeof(FLOW_CHART_IO_GLUE_POINTS) / sizeof(Vertex));
     978             : 
     979             : const Vertex FLOW_CHART_PROCESS_VERTICES[] =
     980             : {
     981             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}
     982             : };
     983             : 
     984             : const Vertex FLOW_CHART_PROCESS_GLUE_POINTS[] =
     985             : {
     986             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
     987             : };
     988             : 
     989             : const Vertex FLOW_CHART_DECISION_VERTICES[] =
     990             : {
     991             :   {0, 10800}, {10800, 0}, {21600, 10800}, {10800, 21600}, {0, 10800}
     992             : };
     993             : 
     994             : const TextRectangle FLOW_CHART_DECISION_TRS[] =
     995             : {
     996             :   { {5400, 5400}, {16200, 16200} }
     997             : };
     998             : 
     999             : const Vertex FLOW_CHART_DECISION_GLUE_POINTS[] =
    1000             : {
    1001             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    1002             : };
    1003             : 
    1004           0 : const CustomShape CS_FLOW_CHART_DECISION(
    1005             :   FLOW_CHART_DECISION_VERTICES, sizeof(FLOW_CHART_DECISION_VERTICES) / sizeof(Vertex),
    1006             :   NULL, 0,
    1007             :   NULL, 0,
    1008             :   NULL, 0,
    1009             :   FLOW_CHART_DECISION_TRS, sizeof(FLOW_CHART_DECISION_TRS) / sizeof(TextRectangle),
    1010             :   21600, 21600,
    1011             :   FLOW_CHART_DECISION_GLUE_POINTS, sizeof(FLOW_CHART_DECISION_GLUE_POINTS) / sizeof(Vertex));
    1012             : 
    1013           0 : const CustomShape CS_FLOW_CHART_PROCESS(
    1014             :   FLOW_CHART_PROCESS_VERTICES, sizeof(FLOW_CHART_PROCESS_VERTICES) / sizeof(Vertex),
    1015             :   NULL, 0,
    1016             :   NULL, 0,
    1017             :   NULL, 0,
    1018             :   NULL, 0,
    1019             :   21600, 21600,
    1020             :   FLOW_CHART_PROCESS_GLUE_POINTS, sizeof(FLOW_CHART_PROCESS_GLUE_POINTS) / sizeof(Vertex));
    1021             : 
    1022             : const Vertex CURVED_UP_ARROW_VERTICES[] =
    1023             : {
    1024             :   {0, CALCULATED_VALUE(22)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(21)}, {0, 0}, {CALCULATED_VALUE(4), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(13), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(8), 0}, {CALCULATED_VALUE(11), CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(22)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(14), 0}, {0, CALCULATED_VALUE(22)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(21)}, {0, 0}, {CALCULATED_VALUE(4), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(14), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(14), 0}
    1025             : };
    1026             : 
    1027             : const unsigned short CURVED_UP_ARROW_SEGMENTS[] =
    1028             : {
    1029             :   0xa408, 0x0003, 0xa508, 0x6000, 0x8000, 0xa404, 0xa508, 0xa504, 0x6000, 0x8000
    1030             : };
    1031             : 
    1032             : const Calculation CURVED_UP_ARROW_CALC[] =
    1033             : {
    1034             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0xa000, PROP_ADJUST_VAL_FIRST, 21600, PROP_ADJUST_VAL_FIRST + 1}, {0x2001, 0x403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0xe000, 0x405, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x406, 1, 2}, {0x4002, 21600, PROP_ADJUST_VAL_FIRST, 0}, {0xa00f, PROP_ADJUST_VAL_FIRST + 2, 21600, 0x404}, {0x6000, 0x404, 0x409, 0}, {0x6000, 0x40a, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6000, 0x407, 0x409, 0}, {0xa000, 0x40b, 21600, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x405, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x40e, 1, 2}, {0x6002, 0x404, 0x407, 0}, {0x6000, PROP_ADJUST_VAL_FIRST, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x2001, 0x411, 1, 2}, {0xa000, 0x410, 0, 0x412}, {0x0000, 21600, 0, 0}, {0x0000, 21600, 0, 0}, {0x0000, 0, 0, 21600}, {0xa000, 0x410, 0, 0x404}, {0x600f, 0x417, 0x404, 21600}, {0x2000, 0x408, 128, 0}, {0x2001, 0x405, 1, 2}, {0x2000, 0x405, 0, 128}, {0xe000, PROP_ADJUST_VAL_FIRST, 0x410, 0x40b}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x41d, 1, 2}, {0x0001, 21600, 21600, 1}, {0x6001, PROP_ADJUST_VAL_FIRST + 2, PROP_ADJUST_VAL_FIRST + 2, 1}, {0xa000, 0x41f, 0, 0x420}, {0x200d, 0x421, 0, 0}, {0x2000, 0x422, 21600, 0}, {0x8001, 21600, 21600, 0x423}, {0x2000, 0x424, 64, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x600f, 0x41e, 0x426, 21600}, {0x2000, 0x427, 0, 64}, {0x2001, 0x404, 1, 2}, {0xa000, PROP_ADJUST_VAL_FIRST + 1, 0, 0x429}, {0x0001, 21600, 2195, 16384}, {0x0001, 21600, 14189, 16384}
    1035             : };
    1036             : 
    1037             : const TextRectangle CURVED_UP_ARROW_TRS[] =
    1038             : {
    1039             :   { {CALCULATED_VALUE(41), CALCULATED_VALUE(43)}, {CALCULATED_VALUE(42), CALCULATED_VALUE(44)} }
    1040             : };
    1041             : 
    1042             : const int CURVED_UP_ARROW_DEFAULT_ADJUST[] =
    1043             : {
    1044             :   12960, 19440, 7200
    1045             : };
    1046             : 
    1047             : const Vertex CURVED_UP_ARROW_GLUE_POINTS[] =
    1048             : {
    1049             :   {CALCULATED_VALUE(8), 0}, {CALCULATED_VALUE(11), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(15), 0}, {CALCULATED_VALUE(16), CALCULATED_VALUE(21)}, {CALCULATED_VALUE(13), CALCULATED_VALUE(2)}
    1050             : };
    1051             : 
    1052           0 : const CustomShape CS_CURVED_UP_ARROW(
    1053             :   CURVED_UP_ARROW_VERTICES, sizeof(CURVED_UP_ARROW_VERTICES) / sizeof(Vertex),
    1054             :   CURVED_UP_ARROW_SEGMENTS, sizeof(CURVED_UP_ARROW_SEGMENTS) / sizeof(unsigned short),
    1055             :   CURVED_UP_ARROW_CALC, sizeof(CURVED_UP_ARROW_CALC) / sizeof(Calculation),
    1056             :   CURVED_UP_ARROW_DEFAULT_ADJUST, sizeof(CURVED_UP_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1057             :   CURVED_UP_ARROW_TRS, sizeof(CURVED_UP_ARROW_TRS) / sizeof(TextRectangle),
    1058             :   21600, 21600,
    1059             :   CURVED_UP_ARROW_GLUE_POINTS, sizeof(CURVED_UP_ARROW_GLUE_POINTS) / sizeof(Vertex));
    1060             : 
    1061           0 : const CustomShape CS_CURVED_LEFT_ARROW(
    1062             :   CURVED_LEFT_ARROW_VERTICES, sizeof(CURVED_LEFT_ARROW_VERTICES) / sizeof(Vertex),
    1063             :   CURVED_LEFT_ARROW_SEGMENTS, sizeof(CURVED_LEFT_ARROW_SEGMENTS) / sizeof(unsigned short),
    1064             :   CURVED_LEFT_ARROW_CALC, sizeof(CURVED_LEFT_ARROW_CALC) / sizeof(Calculation),
    1065             :   CURVED_LEFT_ARROW_DEFAULT_ADJUST, sizeof(CURVED_LEFT_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1066             :   CURVED_LEFT_ARROW_TRS, sizeof(CURVED_LEFT_ARROW_TRS) / sizeof(TextRectangle),
    1067             :   21600, 21600,
    1068             :   CURVED_LEFT_ARROW_GLUE_POINTS, sizeof(CURVED_LEFT_ARROW_GLUE_POINTS) / sizeof(Vertex));
    1069             : 
    1070           0 : const CustomShape CS_HORIZONTAL_SCROLL(
    1071             :   HORIZONTAL_SCROLL_VERTICES, sizeof(HORIZONTAL_SCROLL_VERTICES) / sizeof(Vertex),
    1072             :   HORIZONTAL_SCROLL_SEGMENTS, sizeof(HORIZONTAL_SCROLL_SEGMENTS) / sizeof(unsigned short),
    1073             :   HORIZONTAL_SCROLL_CALC, sizeof(HORIZONTAL_SCROLL_CALC) / sizeof(Calculation),
    1074             :   HORIZONTAL_SCROLL_DEFAULT_ADJUST, sizeof(HORIZONTAL_SCROLL_DEFAULT_ADJUST) / sizeof(int),
    1075             :   HORIZONTAL_SCROLL_TRS, sizeof(HORIZONTAL_SCROLL_TRS) / sizeof(TextRectangle),
    1076             :   21600, 21600,
    1077             :   NULL, 0);
    1078             : 
    1079           0 : const CustomShape CS_VERTICAL_SCROLL(
    1080             :   VERTICAL_SCROLL_VERTICES, sizeof(VERTICAL_SCROLL_VERTICES) / sizeof(Vertex),
    1081             :   VERTICAL_SCROLL_SEGMENTS, sizeof(VERTICAL_SCROLL_SEGMENTS) / sizeof(unsigned short),
    1082             :   VERTICAL_SCROLL_CALC, sizeof(VERTICAL_SCROLL_CALC) / sizeof(Calculation),
    1083             :   VERTICAL_SCROLL_DEFAULT_ADJUST, sizeof(VERTICAL_SCROLL_DEFAULT_ADJUST) / sizeof(int),
    1084             :   VERTICAL_SCROLL_TRS, sizeof(VERTICAL_SCROLL_TRS) / sizeof(TextRectangle),
    1085             :   21600, 21600,
    1086             :   NULL, 0);
    1087             : 
    1088           0 : const CustomShape CS_SMILEY_FACE(
    1089             :   SMILEY_FACE_VERTICES, sizeof(SMILEY_FACE_VERTICES) / sizeof(Vertex),
    1090             :   SMILEY_FACE_SEGMENTS, sizeof(SMILEY_FACE_SEGMENTS) / sizeof(unsigned short),
    1091             :   SMILEY_FACE_CALC, sizeof(SMILEY_FACE_CALC) / sizeof(Calculation),
    1092             :   SMILEY_FACE_DEFAULT_ADJUST, sizeof(SMILEY_FACE_DEFAULT_ADJUST) / sizeof(int),
    1093             :   SMILEY_FACE_TRS, sizeof(SMILEY_FACE_TRS) / sizeof(TextRectangle),
    1094             :   21600, 21600,
    1095             :   SMILEY_FACE_GLUE_POINTS, sizeof(SMILEY_FACE_GLUE_POINTS) / sizeof(Vertex));
    1096             : 
    1097             : const Vertex BLOCK_ARC_VERTICES[] =
    1098             : {
    1099             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(10)}
    1100             : };
    1101             : 
    1102             : const unsigned short BLOCK_ARC_SEGMENTS[] =
    1103             : {
    1104             :   0xA404, 0xa504, 0x6001, 0x8000
    1105             : };
    1106             : 
    1107             : const Calculation BLOCK_ARC_CALC[] =
    1108             : {
    1109             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0},
    1110             :   {0x2000, 0x400, 10800, 0},
    1111             :   {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402},
    1112             :   {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1},
    1113             :   {0x4000, 10800, PROP_ADJUST_VAL_FIRST + 1, 0},
    1114             :   {0x600a, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST, 0},
    1115             :   {0x6009, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST, 0},
    1116             :   {0x4000, 10800, 0x407, 0}, {0x4000, 10800, 0x408, 0}, {0x8000, 10800,0, 0x407}
    1117             : };
    1118             : 
    1119             : const int BLOCK_ARC_DEFAULT_ADJUST[] =
    1120             : {
    1121             :   180 << 16, 5400
    1122             : };
    1123             : 
    1124           0 : const CustomShape CS_BLOCK_ARC(
    1125             :   BLOCK_ARC_VERTICES, sizeof(BLOCK_ARC_VERTICES) / sizeof(Vertex),
    1126             :   BLOCK_ARC_SEGMENTS, sizeof(BLOCK_ARC_SEGMENTS) / sizeof(unsigned short),
    1127             :   BLOCK_ARC_CALC, sizeof(BLOCK_ARC_CALC) / sizeof(Calculation),
    1128             :   BLOCK_ARC_DEFAULT_ADJUST, sizeof(BLOCK_ARC_DEFAULT_ADJUST) / sizeof(int),
    1129             :   NULL, 0,
    1130             :   21600, 21600,
    1131             :   NULL, 0, 0x1);
    1132             : 
    1133             : const Vertex NOTCHED_RIGHT_ARROW_VERTICES[] =
    1134             : {
    1135             :   {0, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), 0}, {21600, 10800}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(5), 10800}, {0, CALCULATED_VALUE(1)}
    1136             : };
    1137             : 
    1138             : const Calculation NOTCHED_RIGHT_ARROW_CALC[] =
    1139             : {
    1140             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x6001, 0x403, 0x404, 10800}
    1141             : };
    1142             : 
    1143             : const TextRectangle NOTCHED_RIGHT_ARROW_TRS[] =
    1144             : {
    1145             :   { {0, 0}, {21600, 21600} }
    1146             : };
    1147             : 
    1148             : const int NOTCHED_RIGHT_ARROW_DEFAULT_ADJUST[] =
    1149             : {
    1150             :   16200, 5400
    1151             : };
    1152             : 
    1153           0 : const CustomShape CS_NOTCHED_RIGHT_ARROW(
    1154             :   NOTCHED_RIGHT_ARROW_VERTICES, sizeof(NOTCHED_RIGHT_ARROW_VERTICES) / sizeof(Vertex),
    1155             :   NULL, 0,
    1156             :   NOTCHED_RIGHT_ARROW_CALC, sizeof(NOTCHED_RIGHT_ARROW_CALC) / sizeof(Calculation),
    1157             :   NOTCHED_RIGHT_ARROW_DEFAULT_ADJUST, sizeof(NOTCHED_RIGHT_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1158             :   NOTCHED_RIGHT_ARROW_TRS, sizeof(NOTCHED_RIGHT_ARROW_TRS) / sizeof(TextRectangle),
    1159             :   21600, 21600,
    1160             :   NULL, 0);
    1161             : 
    1162             : const Vertex STRIPED_RIGHT_ARROW_VERTICES[] =
    1163             : {
    1164             :   {3375, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), 0}, {21600, 10800}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {3375, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(0)}, {675, CALCULATED_VALUE(0)}, {675, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(2)}, {1350, CALCULATED_VALUE(0)}, {2700, CALCULATED_VALUE(0)}, {2700, CALCULATED_VALUE(2)}, {1350, CALCULATED_VALUE(2)}
    1165             : };
    1166             : 
    1167             : const unsigned short STRIPED_RIGHT_ARROW_SEGMENTS[] =
    1168             : {
    1169             :   0x4000, 0x0006, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
    1170             : };
    1171             : 
    1172             : const Calculation STRIPED_RIGHT_ARROW_CALC[] =
    1173             : {
    1174             :   {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x401}, {0x6001, 0x403, 0x400, 10800}, {0x6000, 0x401, 0x404, 0}
    1175             : };
    1176             : 
    1177             : const TextRectangle STRIPED_RIGHT_ARROW_TRS[] =
    1178             : {
    1179             :   { {3375, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(2)} }
    1180             : };
    1181             : 
    1182             : const int STRIPED_RIGHT_ARROW_DEFAULT_ADJUST[] =
    1183             : {
    1184             :   16200, 5400
    1185             : };
    1186             : 
    1187           0 : const CustomShape CS_STRIPED_RIGHT_ARROW(
    1188             :   STRIPED_RIGHT_ARROW_VERTICES, sizeof(STRIPED_RIGHT_ARROW_VERTICES) / sizeof(Vertex),
    1189             :   STRIPED_RIGHT_ARROW_SEGMENTS, sizeof(STRIPED_RIGHT_ARROW_SEGMENTS) / sizeof(unsigned short),
    1190             :   STRIPED_RIGHT_ARROW_CALC, sizeof(STRIPED_RIGHT_ARROW_CALC) / sizeof(Calculation),
    1191             :   STRIPED_RIGHT_ARROW_DEFAULT_ADJUST, sizeof(STRIPED_RIGHT_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1192             :   STRIPED_RIGHT_ARROW_TRS, sizeof(STRIPED_RIGHT_ARROW_TRS) / sizeof(TextRectangle),
    1193             :   21600, 21600,
    1194             :   NULL, 0);
    1195             : 
    1196             : const Vertex SEAL_24_VERTICES[] =
    1197             : {
    1198             :   {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}, {CALCULATED_VALUE(0x07), CALCULATED_VALUE(0x08)}, {CALCULATED_VALUE(0x09), CALCULATED_VALUE(0x0a)}, {CALCULATED_VALUE(0x0b), CALCULATED_VALUE(0x0c)}, {CALCULATED_VALUE(0x0d), CALCULATED_VALUE(0x0e)}, {CALCULATED_VALUE(0x0f), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x11), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x15), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x17), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x19), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1b), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x1d), CALCULATED_VALUE(0x1e)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x23), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x25), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x27), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0x29), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2b), CALCULATED_VALUE(0x2c)}, {CALCULATED_VALUE(0x2d), CALCULATED_VALUE(0x2e)}, {CALCULATED_VALUE(0x2f), CALCULATED_VALUE(0x30)}, {CALCULATED_VALUE(0x31), CALCULATED_VALUE(0x32)}, {CALCULATED_VALUE(0x33), CALCULATED_VALUE(0x34)}, {CALCULATED_VALUE(0x35), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(0x37), CALCULATED_VALUE(0x38)}, {CALCULATED_VALUE(0x39), CALCULATED_VALUE(0x3a)}, {CALCULATED_VALUE(0x3b), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(0x3d), CALCULATED_VALUE(0x3e)}, {CALCULATED_VALUE(0x3f), CALCULATED_VALUE(0x40)}, {CALCULATED_VALUE(0x41), CALCULATED_VALUE(0x42)}, {CALCULATED_VALUE(0x43), CALCULATED_VALUE(0x44)}, {CALCULATED_VALUE(0x45), CALCULATED_VALUE(0x46)}, {CALCULATED_VALUE(0x47), CALCULATED_VALUE(0x48)}, {CALCULATED_VALUE(0x49), CALCULATED_VALUE(0x4a)}, {CALCULATED_VALUE(0x4b), CALCULATED_VALUE(0x4c)}, {CALCULATED_VALUE(0x4d), CALCULATED_VALUE(0x4e)}, {CALCULATED_VALUE(0x4f), CALCULATED_VALUE(0x50)}, {CALCULATED_VALUE(0x51), CALCULATED_VALUE(0x52)}, {CALCULATED_VALUE(0x53), CALCULATED_VALUE(0x54)}, {CALCULATED_VALUE(0x55), CALCULATED_VALUE(0x56)}, {CALCULATED_VALUE(0x57), CALCULATED_VALUE(0x58)}, {CALCULATED_VALUE(0x59), CALCULATED_VALUE(0x5a)}, {CALCULATED_VALUE(0x5b), CALCULATED_VALUE(0x5c)}, {CALCULATED_VALUE(0x5d), CALCULATED_VALUE(0x5e)}, {CALCULATED_VALUE(0x5f), CALCULATED_VALUE(0x60)}, {CALCULATED_VALUE(0x61), CALCULATED_VALUE(0x62)}, {CALCULATED_VALUE(0x63), CALCULATED_VALUE(0x64)}, {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}
    1199             : };
    1200             : 
    1201             : const Calculation SEAL_24_CALC[] =
    1202             : {
    1203             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2081, 0x400, 10800, 315}, {0x2082, 0x400, 10800, 315}, {0x2081, 0x400, 10800, 135}, {0x2082, 0x400, 10800, 135}, {0x0081, 0, 10800, 0}, {0x0082, 0, 10800, 0}, {0x2081, 0x400, 10800, 7}, {0x2082, 0x400, 10800, 7}, {0x0081, 0, 10800, 15}, {0x0082, 0, 10800, 15}, {0x2081, 0x400, 10800, 22}, {0x2082, 0x400, 10800, 22}, {0x0081, 0, 10800, 30}, {0x0082, 0, 10800, 30}, {0x2081, 0x400, 10800, 37}, {0x2082, 0x400, 10800, 37}, {0x0081, 0, 10800, 45}, {0x0082, 0, 10800, 45}, {0x2081, 0x400, 10800, 52}, {0x2082, 0x400, 10800, 52}, {0x0081, 0, 10800, 60}, {0x0082, 0, 10800, 60}, {0x2081, 0x400, 10800, 67}, {0x2082, 0x400, 10800, 67}, {0x0081, 0, 10800, 75}, {0x0082, 0, 10800, 75}, {0x2081, 0x400, 10800, 82}, {0x2082, 0x400, 10800, 82}, {0x0081, 0, 10800, 90}, {0x0082, 0, 10800, 90}, {0x2081, 0x400, 10800, 97}, {0x2082, 0x400, 10800, 97}, {0x0081, 0, 10800, 105}, {0x0082, 0, 10800, 105}, {0x2081, 0x400, 10800, 112}, {0x2082, 0x400, 10800, 112}, {0x0081, 0, 10800, 120}, {0x0082, 0, 10800, 120}, {0x2081, 0x400, 10800, 127}, {0x2082, 0x400, 10800, 127}, {0x0081, 0, 10800, 135}, {0x0082, 0, 10800, 135}, {0x2081, 0x400, 10800, 142}, {0x2082, 0x400, 10800, 142}, {0x0081, 0, 10800, 150}, {0x0082, 0, 10800, 150}, {0x2081, 0x400, 10800, 157}, {0x2082, 0x400, 10800, 157}, {0x0081, 0, 10800, 165}, {0x0082, 0, 10800, 165}, {0x2081, 0x400, 10800, 172}, {0x2082, 0x400, 10800, 172}, {0x0081, 0, 10800, 180}, {0x0082, 0, 10800, 180}, {0x2081, 0x400, 10800, 187}, {0x2082, 0x400, 10800, 187}, {0x0081, 0, 10800, 195}, {0x0082, 0, 10800, 195}, {0x2081, 0x400, 10800, 202}, {0x2082, 0x400, 10800, 202}, {0x0081, 0, 10800, 210}, {0x0082, 0, 10800, 210}, {0x2081, 0x400, 10800, 217}, {0x2082, 0x400, 10800, 217}, {0x0081, 0, 10800, 225}, {0x0082, 0, 10800, 225}, {0x2081, 0x400, 10800, 232}, {0x2082, 0x400, 10800, 232}, {0x0081, 0, 10800, 240}, {0x0082, 0, 10800, 240}, {0x2081, 0x400, 10800, 247}, {0x2082, 0x400, 10800, 247}, {0x0081, 0, 10800, 255}, {0x0082, 0, 10800, 255}, {0x2081, 0x400, 10800, 262}, {0x2082, 0x400, 10800, 262}, {0x0081, 0, 10800, 270}, {0x0082, 0, 10800, 270}, {0x2081, 0x400, 10800, 277}, {0x2082, 0x400, 10800, 277}, {0x0081, 0, 10800, 285}, {0x0082, 0, 10800, 285}, {0x2081, 0x400, 10800, 292}, {0x2082, 0x400, 10800, 292}, {0x0081, 0, 10800, 300}, {0x0082, 0, 10800, 300}, {0x2081, 0x400, 10800, 307}, {0x2082, 0x400, 10800, 307}, {0x0081, 0, 10800, 315}, {0x0082, 0, 10800, 315}, {0x2081, 0x400, 10800, 322}, {0x2082, 0x400, 10800, 322}, {0x0081, 0, 10800, 330}, {0x0082, 0, 10800, 330}, {0x2081, 0x400, 10800, 337}, {0x2082, 0x400, 10800, 337}, {0x0081, 0, 10800, 345}, {0x0082, 0, 10800, 345}, {0x2081, 0x400, 10800, 352}, {0x2082, 0x400, 10800, 352}
    1204             : };
    1205             : 
    1206             : const TextRectangle SEAL_24_TRS[] =
    1207             : {
    1208             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    1209             : };
    1210             : 
    1211             : const int SEAL_24_DEFAULT_ADJUST[] =
    1212             : {
    1213             :   2500
    1214             : };
    1215             : 
    1216           0 : const CustomShape CS_SEAL_24(
    1217             :   SEAL_24_VERTICES, sizeof(SEAL_24_VERTICES) / sizeof(Vertex),
    1218             :   NULL, 0,
    1219             :   SEAL_24_CALC, sizeof(SEAL_24_CALC) / sizeof(Calculation),
    1220             :   SEAL_24_DEFAULT_ADJUST, sizeof(SEAL_24_DEFAULT_ADJUST) / sizeof(int),
    1221             :   SEAL_24_TRS, sizeof(SEAL_24_TRS) / sizeof(TextRectangle),
    1222             :   21600, 21600,
    1223             :   NULL, 0);
    1224             : 
    1225             : const Vertex BENT_ARROW_VERTICES[] =
    1226             : {
    1227             :   {0, 21600}, {0, 12160}, {12427, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), 0}, {21600, 6079}, {CALCULATED_VALUE(0), 12158}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {12427, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(4), 12160}, {CALCULATED_VALUE(4), 21600}
    1228             : };
    1229             : 
    1230             : const unsigned short BENT_ARROW_SEGMENTS[] =
    1231             : {
    1232             :   0x4000, 0x0001, 0xa801, 0x0006, 0xa701, 0x0001, 0x6001, 0x8000
    1233             : };
    1234             : 
    1235             : const Calculation BENT_ARROW_CALC[] =
    1236             : {
    1237             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 12158, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 6079, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x2001, 0x0403, 2, 1}
    1238             : };
    1239             : 
    1240             : const TextRectangle BENT_ARROW_TRS[] =
    1241             : {
    1242             :   { {0, 0}, {21600, 21600} }
    1243             : };
    1244             : 
    1245             : const int BENT_ARROW_DEFAULT_ADJUST[] =
    1246             : {
    1247             :   15100, 2900
    1248             : };
    1249             : 
    1250           0 : const CustomShape CS_BENT_ARROW(
    1251             :   BENT_ARROW_VERTICES, sizeof(BENT_ARROW_VERTICES) / sizeof(Vertex),
    1252             :   BENT_ARROW_SEGMENTS, sizeof(BENT_ARROW_SEGMENTS) / sizeof(unsigned short),
    1253             :   BENT_ARROW_CALC, sizeof(BENT_ARROW_CALC) / sizeof(Calculation),
    1254             :   BENT_ARROW_DEFAULT_ADJUST, sizeof(BENT_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1255             :   BENT_ARROW_TRS, sizeof(BENT_ARROW_TRS) / sizeof(TextRectangle),
    1256             :   21600, 21600,
    1257             :   NULL, 0);
    1258             : 
    1259             : const Vertex BENT_UP_ARROW_VERTICES[] =
    1260             : {
    1261             :   {0, CALCULATED_VALUE(8)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(5), 0}, {21600, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), 21600}, {0, 21600}
    1262             : };
    1263             : 
    1264             : const unsigned short BENT_UP_ARROW_SEGMENTS[] =
    1265             : {
    1266             :   0x4000, 0x0008, 0x6001, 0x8000
    1267             : };
    1268             : 
    1269             : const Calculation BENT_UP_ARROW_CALC[] =
    1270             : {
    1271             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0403, 1, 2}, {0x6000, PROP_ADJUST_VAL_FIRST, 0x0404, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x6000, PROP_ADJUST_VAL_FIRST, 0x0406, 0}, {0x6000, 0x0407, 0x0406, 0}, {0x8000, 21600, 0, 0x406}, {0xa000, 0x409, 0, 0x406}
    1272             : };
    1273             : 
    1274             : const TextRectangle BENT_UP_ARROW_TRS[] =
    1275             : {
    1276             :   { {CALCULATED_VALUE(2), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)} }, { {CALCULATED_VALUE(7), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)} }
    1277             : };
    1278             : 
    1279             : const int BENT_UP_ARROW_DEFAULT_ADJUST[] =
    1280             : {
    1281             :   9340, 18500, 7200
    1282             : };
    1283             : 
    1284           0 : const CustomShape CS_BENT_UP_ARROW(
    1285             :   BENT_UP_ARROW_VERTICES, sizeof(BENT_UP_ARROW_VERTICES) / sizeof(Vertex),
    1286             :   BENT_UP_ARROW_SEGMENTS, sizeof(BENT_UP_ARROW_SEGMENTS) / sizeof(unsigned short),
    1287             :   BENT_UP_ARROW_CALC, sizeof(BENT_UP_ARROW_CALC) / sizeof(Calculation),
    1288             :   BENT_UP_ARROW_DEFAULT_ADJUST, sizeof(BENT_UP_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1289             :   BENT_UP_ARROW_TRS, sizeof(BENT_UP_ARROW_TRS) / sizeof(TextRectangle),
    1290             :   21600, 21600,
    1291             :   NULL, 0);
    1292             : 
    1293             : const Vertex DOWN_ARROW_VERTICES[] =
    1294             : {
    1295             :   {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(1)}, {10800, 21600}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}
    1296             : };
    1297             : 
    1298             : const unsigned short DOWN_ARROW_SEGMENTS[] =
    1299             : {
    1300             :   0x4000, 0x0006, 0x6001, 0x8000
    1301             : };
    1302             : 
    1303             : const Calculation DOWN_ARROW_CALC[] =
    1304             : {
    1305             :   {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x401}, {0x6001, 0x403, 0x400, 10800}, {0x6000, 0x401, 0x404, 0}, {0x6001, 0x401, 0x400, 10800}, {0xa000, 0x401, 0, 0x406}
    1306             : };
    1307             : 
    1308             : const TextRectangle DOWN_ARROW_TRS[] =
    1309             : {
    1310             :   { {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(2), CALCULATED_VALUE(5)} }
    1311             : };
    1312             : 
    1313             : const int DOWN_ARROW_DEFAULT_ADJUST[] =
    1314             : {
    1315             :   16200, 5400
    1316             : };
    1317             : 
    1318           0 : const CustomShape CS_DOWN_ARROW(
    1319             :   DOWN_ARROW_VERTICES, sizeof(DOWN_ARROW_VERTICES) / sizeof(Vertex),
    1320             :   DOWN_ARROW_SEGMENTS, sizeof(DOWN_ARROW_SEGMENTS) / sizeof(unsigned short),
    1321             :   DOWN_ARROW_CALC, sizeof(DOWN_ARROW_CALC) / sizeof(Calculation),
    1322             :   DOWN_ARROW_DEFAULT_ADJUST, sizeof(DOWN_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1323             :   DOWN_ARROW_TRS, sizeof(DOWN_ARROW_TRS) / sizeof(TextRectangle),
    1324             :   21600, 21600,
    1325             :   NULL, 0);
    1326             : 
    1327             : const Vertex UP_ARROW_VERTICES[] =
    1328             : {
    1329             :   {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(1)}, {10800, 0}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 21600}
    1330             : };
    1331             : 
    1332             : const unsigned short UP_ARROW_SEGMENTS[] =
    1333             : {
    1334             :   0x4000, 0x0006, 0x6001, 0x8000
    1335             : };
    1336             : 
    1337             : const Calculation UP_ARROW_CALC[] =
    1338             : {
    1339             :   {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x401}, {0x6001, 0x403, 0x400, 10800}, {0x6000, 0x401, 0x404, 0}, {0x6001, 0x401, 0x400, 10800}, {0xa000, 0x401, 0, 0x406}
    1340             : };
    1341             : 
    1342             : const TextRectangle UP_ARROW_TRS[] =
    1343             : {
    1344             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(2), 21600} }
    1345             : };
    1346             : 
    1347             : const int UP_ARROW_DEFAULT_ADJUST[] =
    1348             : {
    1349             :   5400, 5400
    1350             : };
    1351             : 
    1352           0 : const CustomShape CS_UP_ARROW(
    1353             :   UP_ARROW_VERTICES, sizeof(UP_ARROW_VERTICES) / sizeof(Vertex),
    1354             :   UP_ARROW_SEGMENTS, sizeof(UP_ARROW_SEGMENTS) / sizeof(unsigned short),
    1355             :   UP_ARROW_CALC, sizeof(UP_ARROW_CALC) / sizeof(Calculation),
    1356             :   UP_ARROW_DEFAULT_ADJUST, sizeof(UP_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1357             :   UP_ARROW_TRS, sizeof(UP_ARROW_TRS) / sizeof(TextRectangle),
    1358             :   21600, 21600,
    1359             :   NULL, 0);
    1360             : 
    1361             : const Vertex LEFT_RIGHT_ARROW_VERTICES[] =
    1362             : {
    1363             :   {0, 10800}, {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}, {21600, 10800}, {CALCULATED_VALUE(2), 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(0), 21600}
    1364             : };
    1365             : 
    1366             : const unsigned short LEFT_RIGHT_ARROW_SEGMENTS[] =
    1367             : {
    1368             :   0x4000, 0x0009, 0x6001, 0x8000
    1369             : };
    1370             : 
    1371             : const Calculation LEFT_RIGHT_ARROW_CALC[] =
    1372             : {
    1373             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x6001, PROP_ADJUST_VAL_FIRST, 0x404, 10800}, {0x8000, 21600, 0, 0x405}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x6001, PROP_ADJUST_VAL_FIRST + 1, 0x407, 10800}, {0x8000, 21600, 0, 0x408}
    1374             : };
    1375             : 
    1376             : const TextRectangle LEFT_RIGHT_ARROW_TRS[] =
    1377             : {
    1378             :   { {CALCULATED_VALUE(5), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(3)} }
    1379             : };
    1380             : 
    1381             : const int LEFT_RIGHT_ARROW_DEFAULT_ADJUST[] =
    1382             : {
    1383             :   4300, 5400
    1384             : };
    1385             : 
    1386           0 : const CustomShape CS_LEFT_RIGHT_ARROW(
    1387             :   LEFT_RIGHT_ARROW_VERTICES, sizeof(LEFT_RIGHT_ARROW_VERTICES) / sizeof(Vertex),
    1388             :   LEFT_RIGHT_ARROW_SEGMENTS, sizeof(LEFT_RIGHT_ARROW_SEGMENTS) / sizeof(unsigned short),
    1389             :   LEFT_RIGHT_ARROW_CALC, sizeof(LEFT_RIGHT_ARROW_CALC) / sizeof(Calculation),
    1390             :   LEFT_RIGHT_ARROW_DEFAULT_ADJUST, sizeof(LEFT_RIGHT_ARROW_DEFAULT_ADJUST) / sizeof(int),
    1391             :   LEFT_RIGHT_ARROW_TRS, sizeof(LEFT_RIGHT_ARROW_TRS) / sizeof(TextRectangle),
    1392             :   21600, 21600,
    1393             :   NULL, 0);
    1394             : 
    1395             : const Vertex SEAL_32_VERTICES[] =
    1396             : {
    1397             :   {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}, {CALCULATED_VALUE(0x07), CALCULATED_VALUE(0x08)}, {CALCULATED_VALUE(0x09), CALCULATED_VALUE(0x0a)}, {CALCULATED_VALUE(0x0b), CALCULATED_VALUE(0x0c)}, {CALCULATED_VALUE(0x0d), CALCULATED_VALUE(0x0e)}, {CALCULATED_VALUE(0x0f), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x11), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x15), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x17), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x19), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1b), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x1d), CALCULATED_VALUE(0x1e)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x23), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x25), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x27), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0x29), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2b), CALCULATED_VALUE(0x2c)}, {CALCULATED_VALUE(0x2d), CALCULATED_VALUE(0x2e)}, {CALCULATED_VALUE(0x2f), CALCULATED_VALUE(0x30)}, {CALCULATED_VALUE(0x31), CALCULATED_VALUE(0x32)}, {CALCULATED_VALUE(0x33), CALCULATED_VALUE(0x34)}, {CALCULATED_VALUE(0x35), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(0x37), CALCULATED_VALUE(0x38)}, {CALCULATED_VALUE(0x39), CALCULATED_VALUE(0x3a)}, {CALCULATED_VALUE(0x3b), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(0x3d), CALCULATED_VALUE(0x3e)}, {CALCULATED_VALUE(0x3f), CALCULATED_VALUE(0x40)}, {CALCULATED_VALUE(0x41), CALCULATED_VALUE(0x42)}, {CALCULATED_VALUE(0x43), CALCULATED_VALUE(0x44)}, {CALCULATED_VALUE(0x45), CALCULATED_VALUE(0x46)}, {CALCULATED_VALUE(0x47), CALCULATED_VALUE(0x48)}, {CALCULATED_VALUE(0x49), CALCULATED_VALUE(0x4a)}, {CALCULATED_VALUE(0x4b), CALCULATED_VALUE(0x4c)}, {CALCULATED_VALUE(0x4d), CALCULATED_VALUE(0x4e)}, {CALCULATED_VALUE(0x4f), CALCULATED_VALUE(0x50)}, {CALCULATED_VALUE(0x51), CALCULATED_VALUE(0x52)}, {CALCULATED_VALUE(0x53), CALCULATED_VALUE(0x54)}, {CALCULATED_VALUE(0x55), CALCULATED_VALUE(0x56)}, {CALCULATED_VALUE(0x57), CALCULATED_VALUE(0x58)}, {CALCULATED_VALUE(0x59), CALCULATED_VALUE(0x5a)}, {CALCULATED_VALUE(0x5b), CALCULATED_VALUE(0x5c)}, {CALCULATED_VALUE(0x5d), CALCULATED_VALUE(0x5e)}, {CALCULATED_VALUE(0x5f), CALCULATED_VALUE(0x60)}, {CALCULATED_VALUE(0x61), CALCULATED_VALUE(0x62)}, {CALCULATED_VALUE(0x63), CALCULATED_VALUE(0x64)}, {CALCULATED_VALUE(0x65), CALCULATED_VALUE(0x66)}, {CALCULATED_VALUE(0x67), CALCULATED_VALUE(0x68)}, {CALCULATED_VALUE(0x69), CALCULATED_VALUE(0x6a)}, {CALCULATED_VALUE(0x6b), CALCULATED_VALUE(0x6c)}, {CALCULATED_VALUE(0x6d), CALCULATED_VALUE(0x6e)}, {CALCULATED_VALUE(0x6f), CALCULATED_VALUE(0x70)}, {CALCULATED_VALUE(0x71), CALCULATED_VALUE(0x72)}, {CALCULATED_VALUE(0x73), CALCULATED_VALUE(0x74)}, {CALCULATED_VALUE(0x75), CALCULATED_VALUE(0x76)}, {CALCULATED_VALUE(0x77), CALCULATED_VALUE(0x78)}, {CALCULATED_VALUE(0x79), CALCULATED_VALUE(0x7a)}, {CALCULATED_VALUE(0x7b), CALCULATED_VALUE(0x7c)}, {CALCULATED_VALUE(0x7d), CALCULATED_VALUE(0x7e)}, {CALCULATED_VALUE(0x7f), CALCULATED_VALUE(0x80)}, {CALCULATED_VALUE(0x81), CALCULATED_VALUE(0x82)}, {CALCULATED_VALUE(0x83), CALCULATED_VALUE(0x84)}, {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}
    1398             : };
    1399             : 
    1400             : const Calculation SEAL_32_CALC[] =
    1401             : {
    1402             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2081, 0x400, 10800, 315}, {0x2082, 0x400, 10800, 315}, {0x2081, 0x400, 10800, 135}, {0x2082, 0x400, 10800, 135}, {0x0081, 0, 10800, 0}, {0x0082, 0, 10800, 0}, {0x2081, 0x400, 10800, 5}, {0x2082, 0x400, 10800, 5}, {0x0081, 0, 10800, 11}, {0x0082, 0, 10800, 11}, {0x2081, 0x400, 10800, 16}, {0x2082, 0x400, 10800, 16}, {0x0081, 0, 10800, 22}, {0x0082, 0, 10800, 22}, {0x2081, 0x400, 10800, 28}, {0x2082, 0x400, 10800, 28}, {0x0081, 0, 10800, 33}, {0x0082, 0, 10800, 33}, {0x2081, 0x400, 10800, 39}, {0x2082, 0x400, 10800, 39}, {0x0081, 0, 10800, 45}, {0x0082, 0, 10800, 45}, {0x2081, 0x400, 10800, 50}, {0x2082, 0x400, 10800, 50}, {0x0081, 0, 10800, 56}, {0x0082, 0, 10800, 56}, {0x2081, 0x400, 10800, 61}, {0x2082, 0x400, 10800, 61}, {0x0081, 0, 10800, 67}, {0x0082, 0, 10800, 67}, {0x2081, 0x400, 10800, 73}, {0x2082, 0x400, 10800, 73}, {0x0081, 0, 10800, 78}, {0x0082, 0, 10800, 78}, {0x2081, 0x400, 10800, 84}, {0x2082, 0x400, 10800, 84}, {0x0081, 0, 10800, 90}, {0x0082, 0, 10800, 90}, {0x2081, 0x400, 10800, 95}, {0x2082, 0x400, 10800, 95}, {0x0081, 0, 10800, 101}, {0x0082, 0, 10800, 101}, {0x2081, 0x400, 10800, 106}, {0x2082, 0x400, 10800, 106}, {0x0081, 0, 10800, 112}, {0x0082, 0, 10800, 112}, {0x2081, 0x400, 10800, 118}, {0x2082, 0x400, 10800, 118}, {0x0081, 0, 10800, 123}, {0x0082, 0, 10800, 123}, {0x2081, 0x400, 10800, 129}, {0x2082, 0x400, 10800, 129}, {0x0081, 0, 10800, 135}, {0x0082, 0, 10800, 135}, {0x2081, 0x400, 10800, 140}, {0x2082, 0x400, 10800, 140}, {0x0081, 0, 10800, 146}, {0x0082, 0, 10800, 146}, {0x2081, 0x400, 10800, 151}, {0x2082, 0x400, 10800, 151}, {0x0081, 0, 10800, 157}, {0x0082, 0, 10800, 157}, {0x2081, 0x400, 10800, 163}, {0x2082, 0x400, 10800, 163}, {0x0081, 0, 10800, 168}, {0x0082, 0, 10800, 168}, {0x2081, 0x400, 10800, 174}, {0x2082, 0x400, 10800, 174}, {0x0081, 0, 10800, 180}, {0x0082, 0, 10800, 180}, {0x2081, 0x400, 10800, 185}, {0x2082, 0x400, 10800, 185}, {0x0081, 0, 10800, 191}, {0x0082, 0, 10800, 191}, {0x2081, 0x400, 10800, 196}, {0x2082, 0x400, 10800, 196}, {0x0081, 0, 10800, 202}, {0x0082, 0, 10800, 202}, {0x2081, 0x400, 10800, 208}, {0x2082, 0x400, 10800, 208}, {0x0081, 0, 10800, 213}, {0x0082, 0, 10800, 213}, {0x2081, 0x400, 10800, 219}, {0x2082, 0x400, 10800, 219}, {0x0081, 0, 10800, 225}, {0x0082, 0, 10800, 225}, {0x2081, 0x400, 10800, 230}, {0x2082, 0x400, 10800, 230}, {0x0081, 0, 10800, 236}, {0x0082, 0, 10800, 236}, {0x2081, 0x400, 10800, 241}, {0x2082, 0x400, 10800, 241}, {0x0081, 0, 10800, 247}, {0x0082, 0, 10800, 247}, {0x2081, 0x400, 10800, 253}, {0x2082, 0x400, 10800, 253}, {0x0081, 0, 10800, 258}, {0x0082, 0, 10800, 258}, {0x2081, 0x400, 10800, 264}, {0x2082, 0x400, 10800, 264}, {0x0081, 0, 10800, 270}, {0x0082, 0, 10800, 270}, {0x2081, 0x400, 10800, 275}, {0x2082, 0x400, 10800, 275}, {0x0081, 0, 10800, 281}, {0x0082, 0, 10800, 281}, {0x2081, 0x400, 10800, 286}, {0x2082, 0x400, 10800, 286}, {0x0081, 0, 10800, 292}, {0x0082, 0, 10800, 292}, {0x2081, 0x400, 10800, 298}, {0x2082, 0x400, 10800, 298}, {0x0081, 0, 10800, 303}, {0x0082, 0, 10800, 303}, {0x2081, 0x400, 10800, 309}, {0x2082, 0x400, 10800, 309}, {0x0081, 0, 10800, 315}, {0x0082, 0, 10800, 315}, {0x2081, 0x400, 10800, 320}, {0x2082, 0x400, 10800, 320}, {0x0081, 0, 10800, 326}, {0x0082, 0, 10800, 326}, {0x2081, 0x400, 10800, 331}, {0x2082, 0x400, 10800, 331}, {0x0081, 0, 10800, 337}, {0x0082, 0, 10800, 337}, {0x2081, 0x400, 10800, 343}, {0x2082, 0x400, 10800, 343}, {0x0081, 0, 10800, 348}, {0x0082, 0, 10800, 348}, {0x2081, 0x400, 10800, 354}, {0x2082, 0x400, 10800, 354}
    1403             : };
    1404             : 
    1405             : const TextRectangle SEAL_32_TRS[] =
    1406             : {
    1407             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    1408             : };
    1409             : 
    1410             : const int SEAL_32_DEFAULT_ADJUST[] =
    1411             : {
    1412             :   2500
    1413             : };
    1414             : 
    1415           0 : const CustomShape CS_SEAL_32(
    1416             :   SEAL_32_VERTICES, sizeof(SEAL_32_VERTICES) / sizeof(Vertex),
    1417             :   NULL, 0,
    1418             :   SEAL_32_CALC, sizeof(SEAL_32_CALC) / sizeof(Calculation),
    1419             :   SEAL_32_DEFAULT_ADJUST, sizeof(SEAL_32_DEFAULT_ADJUST) / sizeof(int),
    1420             :   SEAL_32_TRS, sizeof(SEAL_32_TRS) / sizeof(TextRectangle),
    1421             :   21600, 21600,
    1422             :   NULL, 0);
    1423             : 
    1424             : const Vertex SEAL_16_VERTICES[] =
    1425             : {
    1426             :   {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}, {CALCULATED_VALUE(0x07), CALCULATED_VALUE(0x08)}, {CALCULATED_VALUE(0x09), CALCULATED_VALUE(0x0a)}, {CALCULATED_VALUE(0x0b), CALCULATED_VALUE(0x0c)}, {CALCULATED_VALUE(0x0d), CALCULATED_VALUE(0x0e)}, {CALCULATED_VALUE(0x0f), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x11), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x15), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x17), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x19), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1b), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x1d), CALCULATED_VALUE(0x1e)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x23), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x25), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x27), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0x29), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2b), CALCULATED_VALUE(0x2c)}, {CALCULATED_VALUE(0x2d), CALCULATED_VALUE(0x2e)}, {CALCULATED_VALUE(0x2f), CALCULATED_VALUE(0x30)}, {CALCULATED_VALUE(0x31), CALCULATED_VALUE(0x32)}, {CALCULATED_VALUE(0x33), CALCULATED_VALUE(0x34)}, {CALCULATED_VALUE(0x35), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(0x37), CALCULATED_VALUE(0x38)}, {CALCULATED_VALUE(0x39), CALCULATED_VALUE(0x3a)}, {CALCULATED_VALUE(0x3b), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(0x3d), CALCULATED_VALUE(0x3e)}, {CALCULATED_VALUE(0x3f), CALCULATED_VALUE(0x40)}, {CALCULATED_VALUE(0x41), CALCULATED_VALUE(0x42)}, {CALCULATED_VALUE(0x43), CALCULATED_VALUE(0x44)}, {CALCULATED_VALUE(0x05), CALCULATED_VALUE(0x06)}
    1427             : };
    1428             : 
    1429             : const Calculation SEAL_16_CALC[] =
    1430             : {
    1431             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2081, 0x400, 10800, 315}, {0x2082, 0x400, 10800, 315}, {0x2081, 0x400, 10800, 135}, {0x2082, 0x400, 10800, 135}, {0x0081, 0, 10800, 0}, {0x0082, 0, 10800, 0}, {0x2081, 0x400, 10800, 11}, {0x2082, 0x400, 10800, 11}, {0x0081, 0, 10800, 22}, {0x0082, 0, 10800, 22}, {0x2081, 0x400, 10800, 33}, {0x2082, 0x400, 10800, 33}, {0x0081, 0, 10800, 45}, {0x0082, 0, 10800, 45}, {0x2081, 0x400, 10800, 56}, {0x2082, 0x400, 10800, 56}, {0x0081, 0, 10800, 67}, {0x0082, 0, 10800, 67}, {0x2081, 0x400, 10800, 78}, {0x2082, 0x400, 10800, 78}, {0x0081, 0, 10800, 90}, {0x0082, 0, 10800, 90}, {0x2081, 0x400, 10800, 101}, {0x2082, 0x400, 10800, 101}, {0x0081, 0, 10800, 112}, {0x0082, 0, 10800, 112}, {0x2081, 0x400, 10800, 123}, {0x2082, 0x400, 10800, 123}, {0x0081, 0, 10800, 135}, {0x0082, 0, 10800, 135}, {0x2081, 0x400, 10800, 146}, {0x2082, 0x400, 10800, 146}, {0x0081, 0, 10800, 157}, {0x0082, 0, 10800, 157}, {0x2081, 0x400, 10800, 168}, {0x2082, 0x400, 10800, 168}, {0x0081, 0, 10800, 180}, {0x0082, 0, 10800, 180}, {0x2081, 0x400, 10800, 191}, {0x2082, 0x400, 10800, 191}, {0x0081, 0, 10800, 202}, {0x0082, 0, 10800, 202}, {0x2081, 0x400, 10800, 213}, {0x2082, 0x400, 10800, 213}, {0x0081, 0, 10800, 225}, {0x0082, 0, 10800, 225}, {0x2081, 0x400, 10800, 236}, {0x2082, 0x400, 10800, 236}, {0x0081, 0, 10800, 247}, {0x0082, 0, 10800, 247}, {0x2081, 0x400, 10800, 258}, {0x2082, 0x400, 10800, 258}, {0x0081, 0, 10800, 270}, {0x0082, 0, 10800, 270}, {0x2081, 0x400, 10800, 281}, {0x2082, 0x400, 10800, 281}, {0x0081, 0, 10800, 292}, {0x0082, 0, 10800, 292}, {0x2081, 0x400, 10800, 303}, {0x2082, 0x400, 10800, 303}, {0x0081, 0, 10800, 315}, {0x0082, 0, 10800, 315}, {0x2081, 0x400, 10800, 326}, {0x2082, 0x400, 10800, 326}, {0x0081, 0, 10800, 337}, {0x0082, 0, 10800, 337}, {0x2081, 0x400, 10800, 348}, {0x2082, 0x400, 10800, 348}
    1432             : };
    1433             : 
    1434             : const TextRectangle SEAL_16_TRS[] =
    1435             : {
    1436             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    1437             : };
    1438             : 
    1439             : const int SEAL_16_DEFAULT_ADJUST[] =
    1440             : {
    1441             :   2500
    1442             : };
    1443             : 
    1444           0 : const CustomShape CS_SEAL_16(
    1445             :   SEAL_16_VERTICES, sizeof(SEAL_16_VERTICES) / sizeof(Vertex),
    1446             :   NULL, 0,
    1447             :   SEAL_16_CALC, sizeof(SEAL_16_CALC) / sizeof(Calculation),
    1448             :   SEAL_16_DEFAULT_ADJUST, sizeof(SEAL_16_DEFAULT_ADJUST) / sizeof(int),
    1449             :   SEAL_16_TRS, sizeof(SEAL_16_TRS) / sizeof(TextRectangle),
    1450             :   21600, 21600,
    1451             :   NULL, 0);
    1452             : 
    1453             : const Vertex NO_SMOKING_VERTICES[] =
    1454             : {
    1455             :   {10800, 10800}, {10800, 10800}, {0, 360}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(0xa)}, {CALCULATED_VALUE(0xb), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0xd), CALCULATED_VALUE(0xe)}, {CALCULATED_VALUE(0xf), CALCULATED_VALUE(0x10)}
    1456             : };
    1457             : 
    1458             : const unsigned short NO_SMOKING_SEGMENTS[] =
    1459             : {
    1460             :   0xa203, 0x6000, 0xa404, 0x6000, 0xa404, 0x6000, 0x8000
    1461             : };
    1462             : 
    1463             : const Calculation NO_SMOKING_CALC[] =
    1464             : {
    1465             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0xa080, 0x403, 0, 0x402}, {0x8000, 10800, 0, 0x403}, {0x4000, 10800, 0x403, 0}, {0x8000, 10800, 0, 0x404}, {0x4000, 10800, 0x404, 0}, {0x6081, 0x405, 0x407, 45}, {0x6082, 0x405, 0x407, 45}, {0x6081, 0x405, 0x408, 45}, {0x6082, 0x405, 0x408, 45}, {0x6081, 0x406, 0x408, 45}, {0x6082, 0x406, 0x408, 45}, {0x6081, 0x406, 0x407, 45}, {0x6082, 0x406, 0x407, 45}
    1466             : };
    1467             : 
    1468             : const TextRectangle NO_SMOKING_TRS[] =
    1469             : {
    1470             :   { {3163, 3163}, {18437, 18437} }
    1471             : };
    1472             : 
    1473             : const int NO_SMOKING_DEFAULT_ADJUST[] =
    1474             : {
    1475             :   2700
    1476             : };
    1477             : 
    1478             : const Vertex NO_SMOKING_GLUE_POINTS[] =
    1479             : {
    1480             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
    1481             : };
    1482             : 
    1483           0 : const CustomShape CS_NO_SMOKING(
    1484             :   NO_SMOKING_VERTICES, sizeof(NO_SMOKING_VERTICES) / sizeof(Vertex),
    1485             :   NO_SMOKING_SEGMENTS, sizeof(NO_SMOKING_SEGMENTS) / sizeof(unsigned short),
    1486             :   NO_SMOKING_CALC, sizeof(NO_SMOKING_CALC) / sizeof(Calculation),
    1487             :   NO_SMOKING_DEFAULT_ADJUST, sizeof(NO_SMOKING_DEFAULT_ADJUST) / sizeof(int),
    1488             :   NO_SMOKING_TRS, sizeof(NO_SMOKING_TRS) / sizeof(TextRectangle),
    1489             :   21600, 21600,
    1490             :   NO_SMOKING_GLUE_POINTS, sizeof(NO_SMOKING_GLUE_POINTS) / sizeof(Vertex));
    1491             : 
    1492             : const Vertex SEAL_8_VERTICES[] =
    1493             : {
    1494             :   {CALCULATED_VALUE(5), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(18)}, {CALCULATED_VALUE(23), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(30)}, {CALCULATED_VALUE(35), CALCULATED_VALUE(36)}, {CALCULATED_VALUE(41), CALCULATED_VALUE(42)}, {CALCULATED_VALUE(47), CALCULATED_VALUE(48)}, {CALCULATED_VALUE(53), CALCULATED_VALUE(54)}, {CALCULATED_VALUE(59), CALCULATED_VALUE(60)}, {CALCULATED_VALUE(65), CALCULATED_VALUE(66)}, {CALCULATED_VALUE(71), CALCULATED_VALUE(72)}, {CALCULATED_VALUE(77), CALCULATED_VALUE(78)}, {CALCULATED_VALUE(83), CALCULATED_VALUE(84)}, {CALCULATED_VALUE(89), CALCULATED_VALUE(90)}, {CALCULATED_VALUE(95), CALCULATED_VALUE(96)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(6)}
    1495             : };
    1496             : 
    1497             : const Calculation SEAL_8_CALC[] =
    1498             : {
    1499             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2081, 0x400, 10800, 315}, {0x2082, 0x400, 10800, 315}, {0x2081, 0x400, 10800, 135}, {0x2082, 0x400, 10800, 135}, {0x0081, 0, 10800, 0}, {0x0082, 0, 10800, 0}, {0x2081, 0x400, 10800, 7}, {0x2082, 0x400, 10800, 7}, {0x0081, 0, 10800, 15}, {0x0082, 0, 10800, 15}, {0x2081, 0x400, 10800, 22}, {0x2082, 0x400, 10800, 22}, {0x0081, 0, 10800, 30}, {0x0082, 0, 10800, 30}, {0x2081, 0x400, 10800, 37}, {0x2082, 0x400, 10800, 37}, {0x0081, 0, 10800, 45}, {0x0082, 0, 10800, 45}, {0x2081, 0x400, 10800, 52}, {0x2082, 0x400, 10800, 52}, {0x0081, 0, 10800, 60}, {0x0082, 0, 10800, 60}, {0x2081, 0x400, 10800, 67}, {0x2082, 0x400, 10800, 67}, {0x0081, 0, 10800, 75}, {0x0082, 0, 10800, 75}, {0x2081, 0x400, 10800, 82}, {0x2082, 0x400, 10800, 82}, {0x0081, 0, 10800, 90}, {0x0082, 0, 10800, 90}, {0x2081, 0x400, 10800, 97}, {0x2082, 0x400, 10800, 97}, {0x0081, 0, 10800, 105}, {0x0082, 0, 10800, 105}, {0x2081, 0x400, 10800, 112}, {0x2082, 0x400, 10800, 112}, {0x0081, 0, 10800, 120}, {0x0082, 0, 10800, 120}, {0x2081, 0x400, 10800, 127}, {0x2082, 0x400, 10800, 127}, {0x0081, 0, 10800, 135}, {0x0082, 0, 10800, 135}, {0x2081, 0x400, 10800, 142}, {0x2082, 0x400, 10800, 142}, {0x0081, 0, 10800, 150}, {0x0082, 0, 10800, 150}, {0x2081, 0x400, 10800, 157}, {0x2082, 0x400, 10800, 157}, {0x0081, 0, 10800, 165}, {0x0082, 0, 10800, 165}, {0x2081, 0x400, 10800, 172}, {0x2082, 0x400, 10800, 172}, {0x0081, 0, 10800, 180}, {0x0082, 0, 10800, 180}, {0x2081, 0x400, 10800, 187}, {0x2082, 0x400, 10800, 187}, {0x0081, 0, 10800, 195}, {0x0082, 0, 10800, 195}, {0x2081, 0x400, 10800, 202}, {0x2082, 0x400, 10800, 202}, {0x0081, 0, 10800, 210}, {0x0082, 0, 10800, 210}, {0x2081, 0x400, 10800, 217}, {0x2082, 0x400, 10800, 217}, {0x0081, 0, 10800, 225}, {0x0082, 0, 10800, 225}, {0x2081, 0x400, 10800, 232}, {0x2082, 0x400, 10800, 232}, {0x0081, 0, 10800, 240}, {0x0082, 0, 10800, 240}, {0x2081, 0x400, 10800, 247}, {0x2082, 0x400, 10800, 247}, {0x0081, 0, 10800, 255}, {0x0082, 0, 10800, 255}, {0x2081, 0x400, 10800, 262}, {0x2082, 0x400, 10800, 262}, {0x0081, 0, 10800, 270}, {0x0082, 0, 10800, 270}, {0x2081, 0x400, 10800, 277}, {0x2082, 0x400, 10800, 277}, {0x0081, 0, 10800, 285}, {0x0082, 0, 10800, 285}, {0x2081, 0x400, 10800, 292}, {0x2082, 0x400, 10800, 292}, {0x0081, 0, 10800, 300}, {0x0082, 0, 10800, 300}, {0x2081, 0x400, 10800, 307}, {0x2082, 0x400, 10800, 307}, {0x0081, 0, 10800, 315}, {0x0082, 0, 10800, 315}, {0x2081, 0x400, 10800, 322}, {0x2082, 0x400, 10800, 322}, {0x0081, 0, 10800, 330}, {0x0082, 0, 10800, 330}, {0x2081, 0x400, 10800, 337}, {0x2082, 0x400, 10800, 337}, {0x0081, 0, 10800, 345}, {0x0082, 0, 10800, 345}, {0x2081, 0x400, 10800, 352}, {0x2082, 0x400, 10800, 352}
    1500             : };
    1501             : 
    1502             : const TextRectangle SEAL_8_TRS[] =
    1503             : {
    1504             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    1505             : };
    1506             : 
    1507             : const int SEAL_8_DEFAULT_ADJUST[] =
    1508             : {
    1509             :   2500
    1510             : };
    1511             : 
    1512           0 : const CustomShape CS_SEAL_8(
    1513             :   SEAL_8_VERTICES, sizeof(SEAL_8_VERTICES) / sizeof(Vertex),
    1514             :   NULL, 0,
    1515             :   SEAL_8_CALC, sizeof(SEAL_8_CALC) / sizeof(Calculation),
    1516             :   SEAL_8_DEFAULT_ADJUST, sizeof(SEAL_8_DEFAULT_ADJUST) / sizeof(int),
    1517             :   SEAL_8_TRS, sizeof(SEAL_8_TRS) / sizeof(TextRectangle),
    1518             :   21600, 21600,
    1519             :   NULL, 0);
    1520             : 
    1521             : const Vertex RIBBON_2_VERTICES[] =
    1522             : {
    1523             :   {CALCULATED_VALUE(12), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(15), 21600}, {CALCULATED_VALUE(16), 21600}, {0, 21600}, {2750, CALCULATED_VALUE(7)}, {0, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(10), 0}, {CALCULATED_VALUE(11), 0}, {CALCULATED_VALUE(17), 0}, {CALCULATED_VALUE(18), 0}, {CALCULATED_VALUE(19), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(2)}, {18850, CALCULATED_VALUE(7)}, {21600, 21600}, {CALCULATED_VALUE(20), 21600}, {CALCULATED_VALUE(21), 21600}, {CALCULATED_VALUE(22), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(25)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(27)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(22), CALCULATED_VALUE(23)}, {CALCULATED_VALUE(21), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(20), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(18), CALCULATED_VALUE(24)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(25)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(27)}, {CALCULATED_VALUE(18), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(17), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(25)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(25)}, {CALCULATED_VALUE(19), CALCULATED_VALUE(2)}
    1524             : };
    1525             : 
    1526             : const unsigned short RIBBON_2_SEGMENTS[] =
    1527             : {
    1528             :   0x4000, 0x0001, 0x2001, 0x0005, 0x2001, 0x0001, 0x2001, 0x0005, 0x2001, 0x0001, 0x6001, 0x8000, 0x4000, 0x0001, 0x2001, 0x0001, 0x2002, 0x6001, 0x8000, 0x4000, 0x0001, 0x2001, 0x0001, 0x2002, 0x6001, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    1529             : };
    1530             : 
    1531             : const Calculation RIBBON_2_CALC[] =
    1532             : {
    1533             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x8000, 21600, 0, 0x401}, {0x2001, 0x402, 1, 2}, {0x2001, 0x403, 1, 2}, {0x2001, 0x404, 1, 2}, {0x2001, 0x401, 1, 2}, {0x8000, 21600, 0, 0x406}, {0x0000, 420, 0, 0}, {0x2001, 0x408, 2, 1}, {0x6000, 0x400, 0x408, 0}, {0x6000, 0x400, 0x409, 0}, {0x2000, 0x400, 2700, 0}, {0x8000, 21600, 0, 0x404}, {0x8000, 21600, 0, 0x405}, {0xa000, 0x40c, 0, 0x408}, {0xa000, 0x40c, 0, 0x409}, {0x8000, 21600, 0, 0x40b}, {0x8000, 21600, 0, 0x40a}, {0x8000, 21600, 0, 0x400}, {0x8000, 21600, 0, 0x410}, {0x8000, 21600, 0, 0x40f}, {0x8000, 21600, 0, 0x40c}, {0xa000, 0x40d, 0, 0x405}, {0x6000, 0x401, 0x403, 0}, {0x6000, 0x401, 0x404, 0}, {0x6000, 0x419, 0x405, 0}, {0xa000, 0x419, 0, 0x405}
    1534             : };
    1535             : 
    1536             : const TextRectangle RIBBON_2_TRS[] =
    1537             : {
    1538             :   { {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(19), CALCULATED_VALUE(1)} }
    1539             : };
    1540             : 
    1541             : const int RIBBON_2_DEFAULT_ADJUST[] =
    1542             : {
    1543             :   5400, 18900
    1544             : };
    1545             : 
    1546           0 : const CustomShape CS_RIBBON_2(
    1547             :   RIBBON_2_VERTICES, sizeof(RIBBON_2_VERTICES) / sizeof(Vertex),
    1548             :   RIBBON_2_SEGMENTS, sizeof(RIBBON_2_SEGMENTS) / sizeof(unsigned short),
    1549             :   RIBBON_2_CALC, sizeof(RIBBON_2_CALC) / sizeof(Calculation),
    1550             :   RIBBON_2_DEFAULT_ADJUST, sizeof(RIBBON_2_DEFAULT_ADJUST) / sizeof(int),
    1551             :   RIBBON_2_TRS, sizeof(RIBBON_2_TRS) / sizeof(TextRectangle),
    1552             :   21600, 21600,
    1553             :   NULL, 0);
    1554             : 
    1555             : const Vertex CHEVRON_VERTICES[] =
    1556             : {
    1557             :   {0, 0}, {CALCULATED_VALUE(0), 0}, {21600, 10800}, {CALCULATED_VALUE(0), 21600}, {0, 21600}, {CALCULATED_VALUE(1), 10800}
    1558             : };
    1559             : 
    1560             : const unsigned short CHEVRON_SEGMENTS[] =
    1561             : {
    1562             :   0x4000, 0x0005, 0x6001, 0x8000
    1563             : };
    1564             : 
    1565             : const Calculation CHEVRON_CALC[] =
    1566             : {
    1567             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x0400}
    1568             : };
    1569             : 
    1570             : const TextRectangle CHEVRON_TRS[] =
    1571             : {
    1572             :   { {0, 0}, {21600, 21600} }
    1573             : };
    1574             : 
    1575             : const int CHEVRON_DEFAULT_ADJUST[] =
    1576             : {
    1577             :   16200
    1578             : };
    1579             : 
    1580           0 : const CustomShape CS_CHEVRON(
    1581             :   CHEVRON_VERTICES, sizeof(CHEVRON_VERTICES) / sizeof(Vertex),
    1582             :   CHEVRON_SEGMENTS, sizeof(CHEVRON_SEGMENTS) / sizeof(unsigned short),
    1583             :   CHEVRON_CALC, sizeof(CHEVRON_CALC) / sizeof(Calculation),
    1584             :   CHEVRON_DEFAULT_ADJUST, sizeof(CHEVRON_DEFAULT_ADJUST) / sizeof(int),
    1585             :   CHEVRON_TRS, sizeof(CHEVRON_TRS) / sizeof(TextRectangle),
    1586             :   21600, 21600,
    1587             :   NULL, 0);
    1588             : 
    1589             : const Vertex PENTAGON_VERTICES[] =
    1590             : {
    1591             :   {10800, 0}, {0, 8260}, {4230, 21600}, {17370, 21600}, {21600, 8260}, {10800, 0}
    1592             : };
    1593             : 
    1594             : const TextRectangle PENTAGON_TRS[] =
    1595             : {
    1596             :   { {4230, 5080}, {17370, 21600} }
    1597             : };
    1598             : 
    1599             : const Vertex PENTAGON_GLUE_POINTS[] =
    1600             : {
    1601             :   {10800, 0}, {0, 8260}, {4230, 21600}, {10800, 21600}, {17370, 21600}, {21600, 8260}
    1602             : };
    1603             : 
    1604           0 : const CustomShape CS_PENTAGON(
    1605             :   PENTAGON_VERTICES, sizeof(PENTAGON_VERTICES) / sizeof(Vertex),
    1606             :   NULL, 0,
    1607             :   NULL, 0,
    1608             :   NULL, 0,
    1609             :   PENTAGON_TRS, sizeof(PENTAGON_TRS) / sizeof(TextRectangle),
    1610             :   21600, 21600,
    1611             :   PENTAGON_GLUE_POINTS, sizeof(PENTAGON_GLUE_POINTS) / sizeof(Vertex));
    1612             : 
    1613             : const Vertex RIBBON_VERTICES[] =
    1614             : {
    1615             :   {0, 0}, {CALCULATED_VALUE(3), 0}, {CALCULATED_VALUE(4), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(6), 0}, {21600, 0}, {CALCULATED_VALUE(18), CALCULATED_VALUE(14)}, {21600, CALCULATED_VALUE(15)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(15)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(8), 21600}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(15)}, {0, CALCULATED_VALUE(15)}, {2700, CALCULATED_VALUE(14)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(15)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(9), CALCULATED_VALUE(15)}
    1616             : };
    1617             : 
    1618             : const unsigned short RIBBON_SEGMENTS[] =
    1619             : {
    1620             :   0x4000, 0x0001, 0xa701, 0x0003, 0xa801, 0x0005, 0xa801, 0x0001, 0xa701, 0x0003, 0x6000, 0x8000, 0x4000, 0xaa00, 0xa801, 0x0001, 0xa702, 0x0001, 0x8000, 0x4000, 0xaa00, 0xa801, 0x0001, 0xa702, 0x0001, 0x8000, 0x4000, 0xaa00, 0x0001, 0x8000, 0x4000, 0xaa00, 0x0001, 0x8000
    1621             : };
    1622             : 
    1623             : const Calculation RIBBON_CALC[] =
    1624             : {
    1625             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, 0x400, 675, 0}, {0x2000, 0x401, 675, 0}, {0x2000, 0x402, 675, 0}, {0x2000, 0x403, 675, 0}, {0x8000, 21600, 0, 0x404}, {0x8000, 21600, 0, 0x403}, {0x8000, 21600, 0, 0x402}, {0x8000, 21600, 0, 0x401}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2001, 0x40a, 1, 4}, {0x2001, 0x40b, 2, 1}, {0x2001, 0x40b, 3, 1}, {0x8000, 10800, 0, 0x40c}, {0x8000, 21600, 0, 0x40a}, {0x8000, 21600, 0, 0x40b}, {0x0001, 21600, 1, 2}, {0x0000, 21600, 0, 2700}, {0x2000, 0x411, 0, 2700}
    1626             : };
    1627             : 
    1628             : const TextRectangle RIBBON_TRS[] =
    1629             : {
    1630             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(9), 21600} }
    1631             : };
    1632             : 
    1633             : const int RIBBON_DEFAULT_ADJUST[] =
    1634             : {
    1635             :   5400, 2700
    1636             : };
    1637             : 
    1638             : const Vertex RIBBON_GLUE_POINTS[] =
    1639             : {
    1640             :   {CALCULATED_VALUE(17), CALCULATED_VALUE(10)}, {2700, CALCULATED_VALUE(14)}, {CALCULATED_VALUE(17), 21600}, {CALCULATED_VALUE(18), CALCULATED_VALUE(14)}
    1641             : };
    1642             : 
    1643           0 : const CustomShape CS_RIBBON(
    1644             :   RIBBON_VERTICES, sizeof(RIBBON_VERTICES) / sizeof(Vertex),
    1645             :   RIBBON_SEGMENTS, sizeof(RIBBON_SEGMENTS) / sizeof(unsigned short),
    1646             :   RIBBON_CALC, sizeof(RIBBON_CALC) / sizeof(Calculation),
    1647             :   RIBBON_DEFAULT_ADJUST, sizeof(RIBBON_DEFAULT_ADJUST) / sizeof(int),
    1648             :   RIBBON_TRS, sizeof(RIBBON_TRS) / sizeof(TextRectangle),
    1649             :   21600, 21600,
    1650             :   RIBBON_GLUE_POINTS, sizeof(RIBBON_GLUE_POINTS) / sizeof(Vertex));
    1651             : 
    1652             : const Vertex CALLOUT_2_VERTICES[] =
    1653             : {
    1654             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(5)}
    1655             : };
    1656             : 
    1657             : const unsigned short CALLOUT_2_SEGMENTS[] =
    1658             : {
    1659             :   0x4000, 0xab00, 0x0003, 0x6000, 0x8000, // NO STROKE
    1660             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    1661             : };
    1662             : 
    1663             : const Calculation CALLOUT_2_CALC[] =
    1664             : {
    1665             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 3, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 4, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 5, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 6, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 7, 0, 0}
    1666             : };
    1667             : 
    1668             : const int CALLOUT_2_DEFAULT_ADJUST[] =
    1669             : {
    1670             :   -10000, 24500, -3600, 4000, -1800, 4000
    1671             : };
    1672             : 
    1673           0 : const CustomShape CS_CALLOUT_2(
    1674             :   CALLOUT_2_VERTICES, sizeof(CALLOUT_2_VERTICES) / sizeof(Vertex),
    1675             :   CALLOUT_2_SEGMENTS, sizeof(CALLOUT_2_SEGMENTS) / sizeof(unsigned short),
    1676             :   CALLOUT_2_CALC, sizeof(CALLOUT_2_CALC) / sizeof(Calculation),
    1677             :   CALLOUT_2_DEFAULT_ADJUST, sizeof(CALLOUT_2_DEFAULT_ADJUST) / sizeof(int),
    1678             :   NULL, 0,
    1679             :   21600, 21600,
    1680             :   NULL, 0);
    1681             : 
    1682             : const Vertex CALLOUT_3_VERTICES[] =
    1683             : {
    1684             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(6), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}
    1685             : };
    1686             : 
    1687             : const unsigned short CALLOUT_3_SEGMENTS[] =
    1688             : {
    1689             :   0x4000, 0xab00, 0x0003, 0x6000, 0x8000, // NO STROKE
    1690             :   0x4000, 0xaa00, 0x0003, 0x8000 // NO FILL
    1691             : };
    1692             : 
    1693             : const Calculation CALLOUT_3_CALC[] =
    1694             : {
    1695             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 3, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 4, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 5, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 6, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 7, 0, 0}
    1696             : };
    1697             : 
    1698             : const int CALLOUT_3_DEFAULT_ADJUST[] =
    1699             : {
    1700             :   23400, 24500, 25200, 21600, 25200, 4000, 23400, 4000
    1701             : };
    1702             : 
    1703           0 : const CustomShape CS_CALLOUT_3(
    1704             :   CALLOUT_3_VERTICES, sizeof(CALLOUT_3_VERTICES) / sizeof(Vertex),
    1705             :   CALLOUT_3_SEGMENTS, sizeof(CALLOUT_3_SEGMENTS) / sizeof(unsigned short),
    1706             :   CALLOUT_3_CALC, sizeof(CALLOUT_3_CALC) / sizeof(Calculation),
    1707             :   CALLOUT_3_DEFAULT_ADJUST, sizeof(CALLOUT_3_DEFAULT_ADJUST) / sizeof(int),
    1708             :   NULL, 0,
    1709             :   21600, 21600,
    1710             :   NULL, 0);
    1711             : 
    1712             : const Vertex CALLOUT_1_VERTICES[] =
    1713             : {
    1714             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}
    1715             : };
    1716             : 
    1717             : const unsigned short CALLOUT_1_SEGMENTS[] =
    1718             : {
    1719             :   0x4000, 0xab00, 0x0003, 0x6000, 0x8000, // NO STROKE
    1720             :   0x4000, 0x0001, 0x8000
    1721             : };
    1722             : 
    1723             : const Calculation CALLOUT_1_CALC[] =
    1724             : {
    1725             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 3, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 4, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 5, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 6, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 7, 0, 0}
    1726             : };
    1727             : 
    1728             : const int CALLOUT_1_DEFAULT_ADJUST[] =
    1729             : {
    1730             :   -8300, 24500, -1800, 4000
    1731             : };
    1732             : 
    1733           0 : const CustomShape CS_CALLOUT_1(
    1734             :   CALLOUT_1_VERTICES, sizeof(CALLOUT_1_VERTICES) / sizeof(Vertex),
    1735             :   CALLOUT_1_SEGMENTS, sizeof(CALLOUT_1_SEGMENTS) / sizeof(unsigned short),
    1736             :   CALLOUT_1_CALC, sizeof(CALLOUT_1_CALC) / sizeof(Calculation),
    1737             :   CALLOUT_1_DEFAULT_ADJUST, sizeof(CALLOUT_1_DEFAULT_ADJUST) / sizeof(int),
    1738             :   NULL, 0,
    1739             :   21600, 21600,
    1740             :   NULL, 0);
    1741             : 
    1742             : const Vertex CURVED_CONNECTOR_5_VERTICES[] =
    1743             : {
    1744             :   {0, 0}, {CALCULATED_VALUE(21), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(14)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(18)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(20)}, {CALCULATED_VALUE(10), 21600}, {21600, 21600}
    1745             : };
    1746             : 
    1747             : const unsigned short CURVED_CONNECTOR_5_SEGMENTS[] =
    1748             : {
    1749             :   0x4000, 0x2004, 0x8000
    1750             : };
    1751             : 
    1752             : const Calculation CURVED_CONNECTOR_5_CALC[] =
    1753             : {
    1754             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x6000, 0x400, 0x401, 0}, {0x2001, 0x402, 1, 2}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x6000, 0x400, 0x403, 0}, {0x2001, 0x405, 1, 2}, {0x6000, 0x401, 0x403, 0}, {0x2001, 0x407, 1, 2}, {0x2000, 0x401, 21600, 0}, {0x2001, 0x409, 1, 2}, {0x2001, 0x404, 1, 2}, {0x2001, 0x40b, 1, 2}, {0x6000, 0x404, 0x40b, 0}, {0x2001, 0x40d, 1, 2}, {0x2000, 0x404, 21600, 0}, {0x2001, 0x40f, 1, 2}, {0x6000, 0x404, 0x410, 0}, {0x2001, 0x411, 1, 2}, {0x2000, 0x410, 21600, 0}, {0x2001, 0x413, 1, 2}, {0x2001, 0x400, 1, 2}
    1755             : };
    1756             : 
    1757             : const int CURVED_CONNECTOR_5_DEFAULT_ADJUST[] =
    1758             : {
    1759             :   10800, 10800, 10800
    1760             : };
    1761             : 
    1762           0 : const CustomShape CS_CURVED_CONNECTOR_5(
    1763             :   CURVED_CONNECTOR_5_VERTICES, sizeof(CURVED_CONNECTOR_5_VERTICES) / sizeof(Vertex),
    1764             :   CURVED_CONNECTOR_5_SEGMENTS, sizeof(CURVED_CONNECTOR_5_SEGMENTS) / sizeof(unsigned short),
    1765             :   CURVED_CONNECTOR_5_CALC, sizeof(CURVED_CONNECTOR_5_CALC) / sizeof(Calculation),
    1766             :   CURVED_CONNECTOR_5_DEFAULT_ADJUST, sizeof(CURVED_CONNECTOR_5_DEFAULT_ADJUST) / sizeof(int),
    1767             :   NULL, 0,
    1768             :   21600, 21600,
    1769             :   NULL, 0);
    1770             : 
    1771             : const Vertex CURVED_CONNECTOR_4_VERTICES[] =
    1772             : {
    1773             :   {0, 0}, {CALCULATED_VALUE(1), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(8)}, {21600, CALCULATED_VALUE(14)}, {21600, 21600}
    1774             : };
    1775             : 
    1776             : const unsigned short CURVED_CONNECTOR_4_SEGMENTS[] =
    1777             : {
    1778             :   0x4000, 0x2003, 0x8000
    1779             : };
    1780             : 
    1781             : const Calculation CURVED_CONNECTOR_4_CALC[] =
    1782             : {
    1783             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 1, 2}, {0x4000, 21600, 0x400, 0}, {0x2001, 0x402, 1, 2}, {0x6000, 0x400, 0x403, 0}, {0x2001, 0x404, 1, 2}, {0x2000, 0x403, 21600, 0}, {0x2001, 0x406, 1, 2}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2001, PROP_ADJUST_VAL_FIRST + 1, 1, 2}, {0x2001, PROP_ADJUST_VAL_FIRST + 1, 1, 4}, {0x6000, 0x408, 0x409, 0}, {0x2001, 0x40b, 1, 2}, {0x2000, 0x408, 21600, 0}, {0x2001, 0x40d, 1, 2}
    1784             : };
    1785             : 
    1786             : const int CURVED_CONNECTOR_4_DEFAULT_ADJUST[] =
    1787             : {
    1788             :   10800, 10800
    1789             : };
    1790             : 
    1791           0 : const CustomShape CS_CURVED_CONNECTOR_4(
    1792             :   CURVED_CONNECTOR_4_VERTICES, sizeof(CURVED_CONNECTOR_4_VERTICES) / sizeof(Vertex),
    1793             :   CURVED_CONNECTOR_4_SEGMENTS, sizeof(CURVED_CONNECTOR_4_SEGMENTS) / sizeof(unsigned short),
    1794             :   CURVED_CONNECTOR_4_CALC, sizeof(CURVED_CONNECTOR_4_CALC) / sizeof(Calculation),
    1795             :   CURVED_CONNECTOR_4_DEFAULT_ADJUST, sizeof(CURVED_CONNECTOR_4_DEFAULT_ADJUST) / sizeof(int),
    1796             :   NULL, 0,
    1797             :   21600, 21600,
    1798             :   NULL, 0);
    1799             : 
    1800             : const Vertex CURVED_CONNECTOR_3_VERTICES[] =
    1801             : {
    1802             :   {0, 0}, {CALCULATED_VALUE(1), 0}, {CALCULATED_VALUE(0), 5400}, {CALCULATED_VALUE(0), 10800}, {CALCULATED_VALUE(0), 16200}, {CALCULATED_VALUE(3), 21600}, {21600, 21600}
    1803             : };
    1804             : 
    1805             : const unsigned short CURVED_CONNECTOR_3_SEGMENTS[] =
    1806             : {
    1807             :   0x4000, 0x2002, 0x8000
    1808             : };
    1809             : 
    1810             : const Calculation CURVED_CONNECTOR_3_CALC[] =
    1811             : {
    1812             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 1, 2}, {0x2000, 0x400, 21600, 0}, {0x2001, 0x402, 1, 2}
    1813             : };
    1814             : 
    1815             : const int CURVED_CONNECTOR_3_DEFAULT_ADJUST[] =
    1816             : {
    1817             :   10800
    1818             : };
    1819             : 
    1820           0 : const CustomShape CS_CURVED_CONNECTOR_3(
    1821             :   CURVED_CONNECTOR_3_VERTICES, sizeof(CURVED_CONNECTOR_3_VERTICES) / sizeof(Vertex),
    1822             :   CURVED_CONNECTOR_3_SEGMENTS, sizeof(CURVED_CONNECTOR_3_SEGMENTS) / sizeof(unsigned short),
    1823             :   CURVED_CONNECTOR_3_CALC, sizeof(CURVED_CONNECTOR_3_CALC) / sizeof(Calculation),
    1824             :   CURVED_CONNECTOR_3_DEFAULT_ADJUST, sizeof(CURVED_CONNECTOR_3_DEFAULT_ADJUST) / sizeof(int),
    1825             :   NULL, 0,
    1826             :   21600, 21600,
    1827             :   NULL, 0);
    1828             : 
    1829             : 
    1830             : const Vertex BENT_CONNECTOR_5_VERTICES[] =
    1831             : {
    1832             :   {0, 0}, {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(1), 21600}, {21600, 21600}
    1833             : };
    1834             : 
    1835             : const unsigned short BENT_CONNECTOR_5_SEGMENTS[] =
    1836             : {
    1837             :   0x4000, 0x0005, 0x8000
    1838             : };
    1839             : 
    1840             : const Calculation BENT_CONNECTOR_5_CALC[] =
    1841             : {
    1842             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 2, 0, 0}, {0x6000, 0x400, 0x401, 0}, {0x2001, 0x402, 1, 2}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2001, 0x404, 1, 2}, {0x4000, 21600, 0x404, 0}, {0x2001, 0x406, 1, 2}
    1843             : };
    1844             : 
    1845             : const int BENT_CONNECTOR_5_DEFAULT_ADJUST[] =
    1846             : {
    1847             :   10800, 10800, 10800
    1848             : };
    1849             : 
    1850           0 : const CustomShape CS_BENT_CONNECTOR_5(
    1851             :   BENT_CONNECTOR_5_VERTICES, sizeof(BENT_CONNECTOR_5_VERTICES) / sizeof(Vertex),
    1852             :   BENT_CONNECTOR_5_SEGMENTS, sizeof(BENT_CONNECTOR_5_SEGMENTS) / sizeof(unsigned short),
    1853             :   BENT_CONNECTOR_5_CALC, sizeof(BENT_CONNECTOR_5_CALC) / sizeof(Calculation),
    1854             :   BENT_CONNECTOR_5_DEFAULT_ADJUST, sizeof(BENT_CONNECTOR_5_DEFAULT_ADJUST) / sizeof(int),
    1855             :   NULL, 0,
    1856             :   21600, 21600,
    1857             :   NULL, 0);
    1858             : 
    1859             : const Vertex CURVED_CONNECTOR_2_VERTICES[] =
    1860             : {
    1861             :   {0, 0}, {10800, 0}, {21600, 10800}, {21600, 21600}
    1862             : };
    1863             : 
    1864             : const unsigned short CURVED_CONNECTOR_2_SEGMENTS[] =
    1865             : {
    1866             :   0x4000, 0x2001, 0x8000
    1867             : };
    1868             : 
    1869           0 : const CustomShape CS_CURVED_CONNECTOR_2(
    1870             :   CURVED_CONNECTOR_2_VERTICES, sizeof(CURVED_CONNECTOR_2_VERTICES) / sizeof(Vertex),
    1871             :   CURVED_CONNECTOR_2_SEGMENTS, sizeof(CURVED_CONNECTOR_2_SEGMENTS) / sizeof(unsigned short),
    1872             :   NULL, 0,
    1873             :   NULL, 0,
    1874             :   NULL, 0,
    1875             :   21600, 21600,
    1876             :   NULL, 0);
    1877             : 
    1878             : const Vertex BENT_CONNECTOR_4_VERTICES[] =
    1879             : {
    1880             :   {0, 0}, {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(1)}, {21600, 21600}
    1881             : };
    1882             : 
    1883             : const unsigned short BENT_CONNECTOR_4_SEGMENTS[] =
    1884             : {
    1885             :   0x4000, 0x0004, 0x8000
    1886             : };
    1887             : 
    1888             : const Calculation BENT_CONNECTOR_4_CALC[] =
    1889             : {
    1890             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x400, 21600, 0}, {0x2001, 0x402, 1, 2}, {0x2001, 0x401, 1, 2}
    1891             : };
    1892             : 
    1893             : const int BENT_CONNECTOR_4_DEFAULT_ADJUST[] =
    1894             : {
    1895             :   10800, 10800
    1896             : };
    1897             : 
    1898           0 : const CustomShape CS_BENT_CONNECTOR_4(
    1899             :   BENT_CONNECTOR_4_VERTICES, sizeof(BENT_CONNECTOR_4_VERTICES) / sizeof(Vertex),
    1900             :   BENT_CONNECTOR_4_SEGMENTS, sizeof(BENT_CONNECTOR_4_SEGMENTS) / sizeof(unsigned short),
    1901             :   BENT_CONNECTOR_4_CALC, sizeof(BENT_CONNECTOR_4_CALC) / sizeof(Calculation),
    1902             :   BENT_CONNECTOR_4_DEFAULT_ADJUST, sizeof(BENT_CONNECTOR_4_DEFAULT_ADJUST) / sizeof(int),
    1903             :   NULL, 0,
    1904             :   21600, 21600,
    1905             :   NULL, 0);
    1906             : 
    1907             : const Vertex BENT_CONNECTOR_3_VERTICES[] =
    1908             : {
    1909             :   {0, 0}, {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(0), 21600}, {21600, 21600}
    1910             : };
    1911             : 
    1912             : const unsigned short BENT_CONNECTOR_3_SEGMENTS[] =
    1913             : {
    1914             :   0x4000, 0x0003, 0x8000
    1915             : };
    1916             : 
    1917             : const Calculation BENT_CONNECTOR_3_CALC[] =
    1918             : {
    1919             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}
    1920             : };
    1921             : 
    1922             : const int BENT_CONNECTOR_3_DEFAULT_ADJUST[] =
    1923             : {
    1924             :   10800
    1925             : };
    1926             : 
    1927           0 : const CustomShape CS_BENT_CONNECTOR_3(
    1928             :   BENT_CONNECTOR_3_VERTICES, sizeof(BENT_CONNECTOR_3_VERTICES) / sizeof(Vertex),
    1929             :   BENT_CONNECTOR_3_SEGMENTS, sizeof(BENT_CONNECTOR_3_SEGMENTS) / sizeof(unsigned short),
    1930             :   BENT_CONNECTOR_3_CALC, sizeof(BENT_CONNECTOR_3_CALC) / sizeof(Calculation),
    1931             :   BENT_CONNECTOR_3_DEFAULT_ADJUST, sizeof(BENT_CONNECTOR_3_DEFAULT_ADJUST) / sizeof(int),
    1932             :   NULL, 0,
    1933             :   21600, 21600,
    1934             :   NULL, 0);
    1935             : 
    1936             : const Vertex BENT_CONNECTOR_2_VERTICES[] =
    1937             : {
    1938             :   {0, 0}, {21600, 0}, {21600, 21600}
    1939             : };
    1940             : 
    1941             : const unsigned short BENT_CONNECTOR_2_SEGMENTS[] =
    1942             : {
    1943             :   0x4000, 0x0002, 0x8000
    1944             : };
    1945             : 
    1946           0 : const CustomShape CS_BENT_CONNECTOR_2(
    1947             :   BENT_CONNECTOR_2_VERTICES, sizeof(BENT_CONNECTOR_2_VERTICES) / sizeof(Vertex),
    1948             :   BENT_CONNECTOR_2_SEGMENTS, sizeof(BENT_CONNECTOR_2_SEGMENTS) / sizeof(unsigned short),
    1949             :   NULL, 0,
    1950             :   NULL, 0,
    1951             :   NULL, 0,
    1952             :   21600, 21600,
    1953             :   NULL, 0);
    1954             : 
    1955             : const Vertex STRAIGHT_CONNECTOR_1_VERTICES[] =
    1956             : {
    1957             :   {0, 0}, {21600, 21600}
    1958             : };
    1959             : 
    1960             : const unsigned short STRAIGHT_CONNECTOR_1_SEGMENTS[] =
    1961             : {
    1962             :   0x4000, 0x0001, 0x8000
    1963             : };
    1964             : 
    1965           0 : const CustomShape CS_STRAIGHT_CONNECTOR_1(
    1966             :   STRAIGHT_CONNECTOR_1_VERTICES, sizeof(STRAIGHT_CONNECTOR_1_VERTICES) / sizeof(Vertex),
    1967             :   STRAIGHT_CONNECTOR_1_SEGMENTS, sizeof(STRAIGHT_CONNECTOR_1_SEGMENTS) / sizeof(unsigned short),
    1968             :   NULL, 0,
    1969             :   NULL, 0,
    1970             :   NULL, 0,
    1971             :   21600, 21600,
    1972             :   NULL, 0);
    1973             : 
    1974             : const Vertex TEXT_SIMPLE_VERTICES[] =
    1975             : {
    1976             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}
    1977             : };
    1978             : 
    1979           0 : const CustomShape CS_TEXT_SIMPLE(
    1980             :   TEXT_SIMPLE_VERTICES, sizeof(TEXT_SIMPLE_VERTICES) / sizeof(Vertex),
    1981             :   NULL, 0,
    1982             :   NULL, 0,
    1983             :   NULL, 0,
    1984             :   NULL, 0,
    1985             :   21600, 21600,
    1986             :   NULL, 0);
    1987             : 
    1988             : const Vertex DONUT_VERTICES[] =
    1989             : {
    1990             :   {10800, 10800}, {10800, 10800}, {0, 360}, {10800, 10800}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {0, 360}
    1991             : };
    1992             : 
    1993             : const unsigned short DONUT_SEGMENTS[] =
    1994             : {
    1995             :   0xa203, 0x6000, 0xa203, 0x8000
    1996             : };
    1997             : 
    1998             : const Calculation DONUT_CALC[] =
    1999             : {
    2000             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}
    2001             : };
    2002             : 
    2003             : const TextRectangle DONUT_TRS[] =
    2004             : {
    2005             :   { {3163, 3163}, {18437, 18437} }
    2006             : };
    2007             : 
    2008             : const int DONUT_DEFAULT_ADJUST[] =
    2009             : {
    2010             :   5400
    2011             : };
    2012             : 
    2013             : const Vertex DONUT_GLUE_POINTS[] =
    2014             : {
    2015             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
    2016             : };
    2017             : 
    2018           0 : const CustomShape CS_DONUT(
    2019             :   DONUT_VERTICES, sizeof(DONUT_VERTICES) / sizeof(Vertex),
    2020             :   DONUT_SEGMENTS, sizeof(DONUT_SEGMENTS) / sizeof(unsigned short),
    2021             :   DONUT_CALC, sizeof(DONUT_CALC) / sizeof(Calculation),
    2022             :   DONUT_DEFAULT_ADJUST, sizeof(DONUT_DEFAULT_ADJUST) / sizeof(int),
    2023             :   DONUT_TRS, sizeof(DONUT_TRS) / sizeof(TextRectangle),
    2024             :   21600, 21600,
    2025             :   DONUT_GLUE_POINTS, sizeof(DONUT_GLUE_POINTS) / sizeof(Vertex));
    2026             : 
    2027             : const Vertex CAN_VERTICES[] =
    2028             : {
    2029             :   {44, 0}, {20, 0}, {0, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(0)}, {0, CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(4)}, {20, 21600}, {44, 21600}, {68, 21600}, {88, CALCULATED_VALUE(4)}, {88, CALCULATED_VALUE(3)}, {88, CALCULATED_VALUE(0)}, {88, CALCULATED_VALUE(2)}, {68, 0}, {44, 0}, {44, 0}, {20, 0}, {0, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(0)}, {0, CALCULATED_VALUE(5)}, {20, CALCULATED_VALUE(6)}, {44, CALCULATED_VALUE(6)}, {68, CALCULATED_VALUE(6)}, {88, CALCULATED_VALUE(5)}, {88, CALCULATED_VALUE(0)}, {88, CALCULATED_VALUE(2)}, {68, 0}, {44, 0}
    2030             : };
    2031             : 
    2032             : const unsigned short CAN_SEGMENTS[] =
    2033             : {
    2034             :   0x4000, 0x2001, 0x0001, 0x2002, 0x0001, 0x2001, 0x6001, 0x8000, 0x4000, 0x2004, 0x6001, 0x8000
    2035             : };
    2036             : 
    2037             : const Calculation CAN_CALC[] =
    2038             : {
    2039             :   {0x2001, PROP_ADJUST_VAL_FIRST, 2, 4}, {0x2001, OTHER_CALC_VAL, 6, 11}, {0xA000, OTHER_CALC_VAL, 0, OTHER_CALC_VAL | 0x1}, {0x8000, 21600, 0, OTHER_CALC_VAL}, {0x6000, OTHER_CALC_VAL | 0x3, OTHER_CALC_VAL | 0x1, 0}, {0x6000, OTHER_CALC_VAL, OTHER_CALC_VAL | 0x1, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 2, 2}, {0x0000, 44, 0, 0}
    2040             : };
    2041             : 
    2042             : const TextRectangle CAN_TRS[] =
    2043             : {
    2044             :   { {0, CALCULATED_VALUE(6)}, {88, CALCULATED_VALUE(3)} }
    2045             : };
    2046             : 
    2047             : const int CAN_DEFAULT_ADJUST[] =
    2048             : {
    2049             :   5400
    2050             : };
    2051             : 
    2052             : const Vertex CAN_GLUE_POINTS[] =
    2053             : {
    2054             :   {44, CALCULATED_VALUE(6)}, {44, 0}, {0, 10800}, {44, 21600}, {88, 10800}
    2055             : };
    2056             : 
    2057           0 : const CustomShape CS_CAN(
    2058             :   CAN_VERTICES, sizeof(CAN_VERTICES) / sizeof(Vertex),
    2059             :   CAN_SEGMENTS, sizeof(CAN_SEGMENTS) / sizeof(unsigned short),
    2060             :   CAN_CALC, sizeof(CAN_CALC) / sizeof(Calculation),
    2061             :   CAN_DEFAULT_ADJUST, sizeof(CAN_DEFAULT_ADJUST) / sizeof(int),
    2062             :   CAN_TRS, sizeof(CAN_TRS) / sizeof(TextRectangle),
    2063             :   88, 21600,
    2064             :   CAN_GLUE_POINTS, sizeof(CAN_GLUE_POINTS) / sizeof(Vertex));
    2065             : 
    2066             : const Vertex PLAQUE_VERTICES[] =
    2067             : {
    2068             :   {CALCULATED_VALUE(0), 0}, {0, CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(3), 21600}, {21600, CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(3), 0}
    2069             : };
    2070             : 
    2071             : const unsigned short PLAQUE_SEGMENTS[] =
    2072             : {
    2073             :   0x4000, 0xA801, 0x0001, 0xA701, 0x0001, 0xA801, 0x0001, 0xA701, 0x6000, 0x8000
    2074             : };
    2075             : 
    2076             : const Calculation PLAQUE_CALC[] =
    2077             : {
    2078             :   {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xA000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0xA000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0x2082, PROP_ADJUST_VAL_FIRST, 0, 45}, {0x2000, OTHER_CALC_VAL | 0x4, 0, 10800}, {0x8000, 0, 0, PROP_ADJUST_VAL_FIRST}, {0xA000, OTHER_CALC_VAL | 0x6, 0, OTHER_CALC_VAL | 0x5}, {0xA000, PROP_GEO_LEFT, 0, OTHER_CALC_VAL | 0x7}, {0xA000, PROP_GEO_TOP, 0, OTHER_CALC_VAL | 0x7}, {0x6000, PROP_GEO_RIGHT, OTHER_CALC_VAL | 0x7, 0}, {0x6000, PROP_GEO_BOTTOM, OTHER_CALC_VAL | 0x7, 0}, {0xA000, PROP_GEO_LEFT, 0, OTHER_CALC_VAL | 0x5}, {0xA000, PROP_GEO_TOP, 0, OTHER_CALC_VAL | 0x5}, {0x6000, PROP_GEO_RIGHT, OTHER_CALC_VAL | 0x5, 0}, {0x6000, PROP_GEO_BOTTOM, OTHER_CALC_VAL | 0x5, 0}
    2079             : };
    2080             : 
    2081             : const TextRectangle PLAQUE_TRS[] =
    2082             : {
    2083             :   { {CALCULATED_VALUE(0xC), CALCULATED_VALUE(0xD)}, {CALCULATED_VALUE(0xE), CALCULATED_VALUE(0xF)} }
    2084             : };
    2085             : 
    2086             : const int PLAQUE_DEFAULT_ADJUST[] =
    2087             : {
    2088             :   3600
    2089             : };
    2090             : 
    2091             : const Vertex PLAQUE_GLUE_POINTS[] =
    2092             : {
    2093             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2094             : };
    2095             : 
    2096           0 : const CustomShape CS_PLAQUE(
    2097             :   PLAQUE_VERTICES, sizeof(PLAQUE_VERTICES) / sizeof(Vertex),
    2098             :   PLAQUE_SEGMENTS, sizeof(PLAQUE_SEGMENTS) / sizeof(unsigned short),
    2099             :   PLAQUE_CALC, sizeof(PLAQUE_CALC) / sizeof(Calculation),
    2100             :   PLAQUE_DEFAULT_ADJUST, sizeof(PLAQUE_DEFAULT_ADJUST) / sizeof(int),
    2101             :   PLAQUE_TRS, sizeof(PLAQUE_TRS) / sizeof(TextRectangle),
    2102             :   21600, 21600,
    2103             :   PLAQUE_GLUE_POINTS, sizeof(PLAQUE_GLUE_POINTS) / sizeof(Vertex));
    2104             : 
    2105             : 
    2106             : const Vertex BALLOON_VERTICES[] =
    2107             : {
    2108             :   {3590, 0}, {0, 3590}, {0, 14460}, {3590, 18050}, {CALCULATED_VALUE(40), 21600}, {5420, 18050}, {18010, 18050}, {21600, 14460}, {21600, 3590}, {18010, 0}
    2109             : };
    2110             : 
    2111             : const unsigned short BALLOON_SEGMENTS[] =
    2112             : {
    2113             :   0x4000, 0xA701, 0x0001, 0xA801, 0x0003, 0xA701, 0x0001, 0xA801, 0x6001, 0x8000
    2114             : };
    2115             : 
    2116             : const Calculation BALLOON_CALC[] =
    2117             : {
    2118             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 10800}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 10800}, {0x6006, OTHER_CALC_VAL | 0x12, PROP_ADJUST_VAL_FIRST, 0}, {0x6006, OTHER_CALC_VAL | 0x12, PROP_ADJUST_VAL_FIRST + 1, 6280}, {OTHER_CALC_VAL | 0x17, PROP_ADJUST_VAL_FIRST, 0, 0x6006}, {0x6006, OTHER_CALC_VAL | 0x17, PROP_ADJUST_VAL_FIRST + 1, 15320}, {0x6006, OTHER_CALC_VAL | 0x1A, PROP_ADJUST_VAL_FIRST, 6280}, {0x6006, OTHER_CALC_VAL | 0x1A, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6006, OTHER_CALC_VAL | 0x1D, PROP_ADJUST_VAL_FIRST, 15320}, {0x6006, OTHER_CALC_VAL | 0x1D, PROP_ADJUST_VAL_FIRST + 1, 21600}, {0x6006, OTHER_CALC_VAL | 0x20, PROP_ADJUST_VAL_FIRST, 21600}, {0x6006, OTHER_CALC_VAL | 0x20, PROP_ADJUST_VAL_FIRST + 1, 15320}, {0x6006, OTHER_CALC_VAL | 0x22, PROP_ADJUST_VAL_FIRST, 21600}, {0x6006, OTHER_CALC_VAL | 0x22, PROP_ADJUST_VAL_FIRST + 1, 6280}, {0x6006, OTHER_CALC_VAL | 0x24, PROP_ADJUST_VAL_FIRST, 15320}, {0x6006, OTHER_CALC_VAL | 0x24, PROP_ADJUST_VAL_FIRST + 1, 0}, {0x6006, OTHER_CALC_VAL | 0x26, PROP_ADJUST_VAL_FIRST, 6280}, {0x6006, OTHER_CALC_VAL | 0x26, PROP_ADJUST_VAL_FIRST + 1, 0}, {0xA006, PROP_ADJUST_VAL_FIRST, -1, OTHER_CALC_VAL | 0x13}, {0xA006, OTHER_CALC_VAL | 0x1, -1, OTHER_CALC_VAL | 0x16}, {0x2003, OTHER_CALC_VAL, 0, 0}, {0x2003, OTHER_CALC_VAL | 0x1, 0, 0}, {0xA000, OTHER_CALC_VAL | 0x14, 0, OTHER_CALC_VAL | 0x15}, {0xA006, PROP_ADJUST_VAL_FIRST, -1, OTHER_CALC_VAL | 0x18}, {0x6006, OTHER_CALC_VAL | 0x1, OTHER_CALC_VAL | 0x16, -1}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 21600}, {0x6006, OTHER_CALC_VAL | 0x19, OTHER_CALC_VAL | 0x1B, -1}, {0xA006, OTHER_CALC_VAL, -1, OTHER_CALC_VAL | 0x1C}, {0xA000, OTHER_CALC_VAL | 0x15, 0, OTHER_CALC_VAL | 0x14}, {0x6006, OTHER_CALC_VAL | 0x19, OTHER_CALC_VAL | 0x1E, -1}, {0x6006, OTHER_CALC_VAL, OTHER_CALC_VAL | 0x1C, -1}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 21600}, {0x6006, OTHER_CALC_VAL | 0x1F, OTHER_CALC_VAL | 0x21, -1}, {0x6006, OTHER_CALC_VAL | 0x1, OTHER_CALC_VAL | 0x16, -1}, {0x6006, OTHER_CALC_VAL | 0x1F, OTHER_CALC_VAL | 0x23, -1}, {0xA006, OTHER_CALC_VAL | 0x1, -1, OTHER_CALC_VAL | 0x16}, {0xA006, PROP_ADJUST_VAL_FIRST + 1, -1, OTHER_CALC_VAL | 0x25}, {0x6006, OTHER_CALC_VAL, OTHER_CALC_VAL | 0x1C, -1}, {0xA006, PROP_ADJUST_VAL_FIRST + 1, -1, OTHER_CALC_VAL | 0x27}, {0xA006, OTHER_CALC_VAL, -1, OTHER_CALC_VAL | 0x1C}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}
    2119             : };
    2120             : 
    2121             : const TextRectangle BALLOON_TRS[] =
    2122             : {
    2123             :   { {800, 800}, {20800, 17250} }
    2124             : };
    2125             : 
    2126             : const int BALLOON_DEFAULT_ADJUST[] =
    2127             : {
    2128             :   1400, 25920
    2129             : };
    2130             : 
    2131             : const Vertex ARC_VERTICES[] =
    2132             : {
    2133             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(5)}, {10800, 10800}, {0, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(5)}
    2134             : };
    2135             : 
    2136             : const unsigned short ARC_SEGMENTS[] =
    2137             : {
    2138             :   0xa504, 0xab00, 0x0001, 0x6001, 0x8000, 0xa504, 0xaa00, 0x8000
    2139             : };
    2140             : 
    2141             : const Calculation ARC_CALC[] =
    2142             : {
    2143             :   {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x402, 10800, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST + 1, 0}, {0x2000, 0x404, 10800, 0}, {0x400a, 10800, PROP_ADJUST_VAL_FIRST + 1, 0}, {0x2000, 0x406, 10800, 0}
    2144             : };
    2145             : 
    2146             : const int ARC_DEFAULT_ADJUST[] =
    2147             : {
    2148             :   270 << 16, 0
    2149             : };
    2150             : 
    2151             : const Vertex ARC_GLUE_POINTS[] =
    2152             : {
    2153             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2154             : };
    2155             : 
    2156           0 : const CustomShape CS_ARC(
    2157             :   ARC_VERTICES, sizeof(ARC_VERTICES) / sizeof(Vertex),
    2158             :   ARC_SEGMENTS, sizeof(ARC_SEGMENTS) / sizeof(unsigned short),
    2159             :   ARC_CALC, sizeof(ARC_CALC) / sizeof(Calculation),
    2160             :   ARC_DEFAULT_ADJUST, sizeof(ARC_DEFAULT_ADJUST) / sizeof(int),
    2161             :   NULL, 0,
    2162             :   21600, 21600,
    2163             :   ARC_GLUE_POINTS, sizeof(ARC_GLUE_POINTS) / sizeof(Vertex), 2 | 1);
    2164             : 
    2165           0 : const CustomShape CS_BALLOON(
    2166             :   BALLOON_VERTICES, sizeof(BALLOON_VERTICES) / sizeof(Vertex),
    2167             :   BALLOON_SEGMENTS, sizeof(BALLOON_SEGMENTS) / sizeof(unsigned short),
    2168             :   BALLOON_CALC, sizeof(BALLOON_CALC) / sizeof(Calculation),
    2169             :   BALLOON_DEFAULT_ADJUST, sizeof(BALLOON_DEFAULT_ADJUST) / sizeof(int),
    2170             :   BALLOON_TRS, sizeof(BALLOON_TRS) / sizeof(TextRectangle),
    2171             :   21600, 21600,
    2172             :   NULL, 0);
    2173             : 
    2174             : const Vertex CUBE_VERTICES[] =
    2175             : {
    2176             :   {0, CALCULATED_VALUE(12)}, {0, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}, {CALCULATED_VALUE(11), 0}, {CALCULATED_VALUE(11), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(12)}, {0, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), 0}, {CALCULATED_VALUE(11), 0}, {CALCULATED_VALUE(4), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(11), 0}, {CALCULATED_VALUE(11), CALCULATED_VALUE(3)}
    2177             : };
    2178             : 
    2179             : const unsigned short CUBE_SEGMENTS[] =
    2180             : {
    2181             :   0x4000, 0x0005, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
    2182             : };
    2183             : 
    2184             : const Calculation CUBE_CALC[] =
    2185             : {
    2186             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_TOP, OTHER_CALC_VAL, 0}, {0x6000, PROP_GEO_LEFT, OTHER_CALC_VAL, 0}, {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL}, {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL}, {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL | 2}, {0x2001, OTHER_CALC_VAL | 5, 1, 2}, {0x6000, OTHER_CALC_VAL | 2, OTHER_CALC_VAL | 6, 0}, {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL | 1}, {0x2001, OTHER_CALC_VAL | 8, 1, 2}, {0x6000, OTHER_CALC_VAL | 1, OTHER_CALC_VAL | 9, 0}, {0x2000, PROP_GEO_RIGHT, 0, 0}, {0x2000, PROP_GEO_BOTTOM, 0, 0}
    2187             : };
    2188             : 
    2189             : const TextRectangle CUBE_TRS[] =
    2190             : {
    2191             :   { {0, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(12)} }
    2192             : };
    2193             : 
    2194             : const int CUBE_DEFAULT_ADJUST[] =
    2195             : {
    2196             :   5400
    2197             : };
    2198             : 
    2199             : const Vertex CUBE_GLUE_POINTS[] =
    2200             : {
    2201             :   {CALCULATED_VALUE(7), 0}, {CALCULATED_VALUE(6), CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(10)}, {CALCULATED_VALUE(6), 21600}, {CALCULATED_VALUE(4), CALCULATED_VALUE(10)}, {21600, CALCULATED_VALUE(9)}
    2202             : };
    2203             : 
    2204           0 : const CustomShape CS_CUBE(
    2205             :   CUBE_VERTICES, sizeof(CUBE_VERTICES) / sizeof(Vertex),
    2206             :   CUBE_SEGMENTS, sizeof(CUBE_SEGMENTS) / sizeof(unsigned short),
    2207             :   CUBE_CALC, sizeof(CUBE_CALC) / sizeof(Calculation),
    2208             :   CUBE_DEFAULT_ADJUST, sizeof(CUBE_DEFAULT_ADJUST) / sizeof(int),
    2209             :   CUBE_TRS, sizeof(CUBE_TRS) / sizeof(TextRectangle),
    2210             :   21600, 21600,
    2211             :   CUBE_GLUE_POINTS, sizeof(CUBE_GLUE_POINTS) / sizeof(Vertex));
    2212             : 
    2213             : const Vertex HOME_PLATE_VERTICES[] =
    2214             : {
    2215             :   {0, 0}, {CALCULATED_VALUE(0), 0}, {21600, 10800}, {CALCULATED_VALUE(0), 21600}, {0, 21600}
    2216             : };
    2217             : 
    2218             : const unsigned short HOME_PLATE_SEGMENTS[] =
    2219             : {
    2220             :   0x4000, 0x0004, 0x6001, 0x8000
    2221             : };
    2222             : 
    2223             : const Calculation HOME_PLATE_CALC[] =
    2224             : {
    2225             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}
    2226             : };
    2227             : 
    2228             : const TextRectangle HOME_PLATE_TRS[] =
    2229             : {
    2230             :   { {0, 0}, {21600, 21600} }
    2231             : };
    2232             : 
    2233             : const int HOME_PLATE_DEFAULT_ADJUST[] =
    2234             : {
    2235             :   16200
    2236             : };
    2237             : 
    2238           0 : const CustomShape CS_HOME_PLATE(
    2239             :   HOME_PLATE_VERTICES, sizeof(HOME_PLATE_VERTICES) / sizeof(Vertex),
    2240             :   HOME_PLATE_SEGMENTS, sizeof(HOME_PLATE_SEGMENTS) / sizeof(unsigned short),
    2241             :   HOME_PLATE_CALC, sizeof(HOME_PLATE_CALC) / sizeof(Calculation),
    2242             :   HOME_PLATE_DEFAULT_ADJUST, sizeof(HOME_PLATE_DEFAULT_ADJUST) / sizeof(int),
    2243             :   HOME_PLATE_TRS, sizeof(HOME_PLATE_TRS) / sizeof(TextRectangle),
    2244             :   21600, 21600,
    2245             :   NULL, 0);
    2246             : 
    2247             : const Vertex ARROW_VERTICES[] =
    2248             : {
    2249             :   {0, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0) }, {CALCULATED_VALUE(1) , 0}, {21600, 10800}, {CALCULATED_VALUE(1) , 21600}, {CALCULATED_VALUE(1) , CALCULATED_VALUE(2) }, {0, CALCULATED_VALUE(2) }
    2250             : };
    2251             : 
    2252             : const unsigned short ARROW_SEGMENTS[] =
    2253             : {
    2254             :   0x4000, 0x0006, 0x6001, 0x8000
    2255             : };
    2256             : 
    2257             : const Calculation ARROW_CALC[] =
    2258             : {
    2259             :   {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, OTHER_CALC_VAL  | 1}, {0x6001, OTHER_CALC_VAL | 3, OTHER_CALC_VAL, 10800}, {0x6000, OTHER_CALC_VAL | 1, OTHER_CALC_VAL | 4, 0}, {0x6001, OTHER_CALC_VAL | 1, OTHER_CALC_VAL, 10800}, {0xA000, OTHER_CALC_VAL | 1, 0, OTHER_CALC_VAL | 6}
    2260             : };
    2261             : 
    2262             : const TextRectangle ARROW_TRS[] =
    2263             : {
    2264             :   { {0, CALCULATED_VALUE(0)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(2)} }
    2265             : };
    2266             : 
    2267             : const int ARROW_DEFAULT_ADJUST[] =
    2268             : {
    2269             :   16200, 5400
    2270             : };
    2271             : 
    2272           0 : const CustomShape CS_ARROW(
    2273             :   ARROW_VERTICES, sizeof(ARROW_VERTICES) / sizeof(Vertex),
    2274             :   ARROW_SEGMENTS, sizeof(ARROW_SEGMENTS) / sizeof(unsigned short),
    2275             :   ARROW_CALC, sizeof(ARROW_CALC) / sizeof(Calculation),
    2276             :   ARROW_DEFAULT_ADJUST, sizeof(ARROW_DEFAULT_ADJUST) / sizeof(int),
    2277             :   ARROW_TRS, sizeof(ARROW_TRS) / sizeof(TextRectangle),
    2278             :   21600, 21600,
    2279             :   NULL, 0);
    2280             : 
    2281             : const Vertex OCTAGON_VERTICES[] =
    2282             : {
    2283             :   {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(2), 0}, {21600, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), 21600}, {CALCULATED_VALUE(0), 21600}, {0, CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(1)}
    2284             : };
    2285             : 
    2286             : const unsigned short OCTAGON_SEGMENTS[] =
    2287             : {
    2288             :   0x4000, 0x0007, 0x6001, 0x8000
    2289             : };
    2290             : 
    2291             : const Calculation OCTAGON_CALC[] =
    2292             : {
    2293             :   {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xA000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xA000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x6000, PROP_GEO_LEFT, OTHER_CALC_VAL | 4, 0}, {0x6000, PROP_GEO_TOP, OTHER_CALC_VAL | 4, 0}, {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL | 4}, {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL | 4}
    2294             : };
    2295             : 
    2296             : const TextRectangle OCTAGON_TRS[] =
    2297             : {
    2298             :   { {CALCULATED_VALUE(5), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(8)} }
    2299             : };
    2300             : 
    2301             : const int OCTAGON_DEFAULT_ADJUST[] =
    2302             : {
    2303             :   5000
    2304             : };
    2305             : 
    2306             : const Vertex OCTAGON_GLUE_POINTS[] =
    2307             : {
    2308             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2309             : };
    2310             : 
    2311           0 : const CustomShape CS_OCTAGON(
    2312             :   OCTAGON_VERTICES, sizeof(OCTAGON_VERTICES) / sizeof(Vertex),
    2313             :   OCTAGON_SEGMENTS, sizeof(OCTAGON_SEGMENTS) / sizeof(unsigned short),
    2314             :   OCTAGON_CALC, sizeof(OCTAGON_CALC) / sizeof(Calculation),
    2315             :   OCTAGON_DEFAULT_ADJUST, sizeof(OCTAGON_DEFAULT_ADJUST) / sizeof(int),
    2316             :   OCTAGON_TRS, sizeof(OCTAGON_TRS) / sizeof(TextRectangle),
    2317             :   21600, 21600,
    2318             :   OCTAGON_GLUE_POINTS, sizeof(OCTAGON_GLUE_POINTS) / sizeof(Vertex));
    2319             : 
    2320             : const Vertex ROUND_RECTANGLE_VERTICES[] =
    2321             : {
    2322             :   {CALCULATED_VALUE(7), 0},
    2323             :   {0, CALCULATED_VALUE(8)},
    2324             :   {0, CALCULATED_VALUE(9)},
    2325             :   {CALCULATED_VALUE(7), 21600},
    2326             :   {CALCULATED_VALUE(10), 21600},
    2327             :   {21600, CALCULATED_VALUE(9)},
    2328             :   {21600, CALCULATED_VALUE(8)},
    2329             :   {CALCULATED_VALUE(10), 0}
    2330             : };
    2331             : 
    2332             : const unsigned short ROUND_RECTANGLE_SEGMENTS[] =
    2333             : {
    2334             :   0x4000, 0xA701, 0x0001, 0xA801, 0x0001, 0xA701, 0x0001, 0xA801, 0x6000, 0x8000
    2335             : };
    2336             : 
    2337             : const Calculation ROUND_RECTANGLE_CALC[] =
    2338             : {
    2339             :   {0x000E, 0, 45, 0},                                  // 0
    2340             :   {0x6009, PROP_ADJUST_VAL_FIRST, OTHER_CALC_VAL, 0},  // 1
    2341             :   {0x2001, OTHER_CALC_VAL | 1, 3163, 7636},            // 2
    2342             :   {0x6000, PROP_GEO_LEFT, OTHER_CALC_VAL | 2, 0},      // 3
    2343             :   {0x6000, PROP_GEO_TOP, OTHER_CALC_VAL | 2, 0},       // 4
    2344             :   {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL | 2},     // 5
    2345             :   {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL | 2},    // 6
    2346             :   {0x6000, PROP_GEO_LEFT, OTHER_CALC_VAL | 13, 0},   // 7
    2347             :   {0x6000, PROP_GEO_TOP, OTHER_CALC_VAL | 14, 0},    // 8
    2348             :   {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL | 14}, // 9
    2349             :   {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL | 13},  // 10
    2350             :   {0x2005, ASPECT_RATIO, 1, 0},                           // 11
    2351             :   {0x2004, ASPECT_RATIO, 1, 0},                           // 12
    2352             :   {0xA001, PROP_ADJUST_VAL_FIRST, 1, OTHER_CALC_VAL | 11}, // 13
    2353             :   {0x6001, PROP_ADJUST_VAL_FIRST, OTHER_CALC_VAL | 12, 1} // 14
    2354             : };
    2355             : 
    2356             : const TextRectangle ROUND_RECTANGLE_TRS[] =
    2357             : {
    2358             :   { {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(6)} }
    2359             : };
    2360             : 
    2361             : const int ROUND_RECTANGLE_DEFAULT_ADJUST[] =
    2362             : {
    2363             :   3600
    2364             : };
    2365             : 
    2366           0 : const CustomShape CS_ROUND_RECTANGLE(
    2367             :   ROUND_RECTANGLE_VERTICES, sizeof(ROUND_RECTANGLE_VERTICES) / sizeof(Vertex),
    2368             :   ROUND_RECTANGLE_SEGMENTS, sizeof(ROUND_RECTANGLE_SEGMENTS) / sizeof(unsigned short),
    2369             :   ROUND_RECTANGLE_CALC, sizeof(ROUND_RECTANGLE_CALC) / sizeof(Calculation),
    2370             :   ROUND_RECTANGLE_DEFAULT_ADJUST, sizeof(ROUND_RECTANGLE_DEFAULT_ADJUST) / sizeof(int),
    2371             :   ROUND_RECTANGLE_TRS, sizeof(ROUND_RECTANGLE_TRS) / sizeof(TextRectangle),
    2372             :   21600, 21600,
    2373             :   NULL, 0);
    2374             : 
    2375             : const Vertex STAR_VERTICES[] =
    2376             : {
    2377             :   {10797, 0}, {8278, 8256}, {0, 8256}, {6722, 13405}, {4198, 21600}, {10797, 16580}, {17401, 21600}, {14878, 13405}, {21600, 8256}, {13321, 8256}, {10797, 0}
    2378             : };
    2379             : 
    2380             : const TextRectangle STAR_TRS[] =
    2381             : {
    2382             :   { {6722, 8256}, {14878, 15460} }
    2383             : };
    2384             : 
    2385           0 : const CustomShape CS_STAR(
    2386             :   STAR_VERTICES, sizeof(STAR_VERTICES) / sizeof(Vertex),
    2387             :   NULL, 0,
    2388             :   NULL, 0,
    2389             :   NULL, 0,
    2390             :   STAR_TRS, sizeof(STAR_TRS) / sizeof(TextRectangle),
    2391             :   21600, 21600,
    2392             :   NULL, 0);
    2393             : 
    2394             : const Vertex PLUS_VERTICES[] =
    2395             : {
    2396             :   {CALCULATED_VALUE(1), 0}, {CALCULATED_VALUE(2), 0}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), 21600}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(3)}, {0, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(1), 0}
    2397             : };
    2398             : 
    2399             : const Calculation PLUS_CALC[] =
    2400             : {
    2401             :   {0x2001, PROP_ADJUST_VAL_FIRST, 10799, 10800}, {0x2000, OTHER_CALC_VAL, 0, 0}, {0xA000, PROP_GEO_RIGHT, 0, OTHER_CALC_VAL}, {0xA000, PROP_GEO_BOTTOM, 0, OTHER_CALC_VAL}
    2402             : };
    2403             : 
    2404             : const TextRectangle PLUS_TRS[] =
    2405             : {
    2406             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)} }
    2407             : };
    2408             : 
    2409             : const int PLUS_DEFAULT_ADJUST[] =
    2410             : {
    2411             :   5400
    2412             : };
    2413             : 
    2414             : const Vertex PLUS_GLUE_POINTS[] =
    2415             : {
    2416             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2417             : };
    2418             : 
    2419           0 : const CustomShape CS_PLUS(
    2420             :   PLUS_VERTICES, sizeof(PLUS_VERTICES) / sizeof(Vertex),
    2421             :   NULL, 0,
    2422             :   PLUS_CALC, sizeof(PLUS_CALC) / sizeof(Calculation),
    2423             :   PLUS_DEFAULT_ADJUST, sizeof(PLUS_DEFAULT_ADJUST) / sizeof(int),
    2424             :   PLUS_TRS, sizeof(PLUS_TRS) / sizeof(TextRectangle),
    2425             :   21600, 21600,
    2426             :   PLUS_GLUE_POINTS, sizeof(PLUS_GLUE_POINTS) / sizeof(Vertex));
    2427             : 
    2428             : 
    2429             : const Vertex TRAPEZOID_VERTICES[] =
    2430             : {
    2431             :   {0, 0}, {21600, 0}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(1), 21600}
    2432             : };
    2433             : 
    2434             : const unsigned short TRAPEZOID_SEGMENTS[] =
    2435             : {
    2436             :   0x4000, 0x0003, 0x6001, 0x8000
    2437             : };
    2438             : 
    2439             : const Calculation TRAPEZOID_CALC[] =
    2440             : {
    2441             :   {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 10, 18}, {0x2000, OTHER_CALC_VAL | 2, 1750, 0}, {0x8000, 21600, 0, OTHER_CALC_VAL | 3}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x8000, 21600, 0, OTHER_CALC_VAL | 5}
    2442             : };
    2443             : 
    2444             : const TextRectangle TRAPEZOID_TRS[] =
    2445             : {
    2446             :   { {CALCULATED_VALUE(3), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(4)} }
    2447             : };
    2448             : 
    2449             : const int TRAPEZOID_DEFAULT_ADJUST[] =
    2450             : {
    2451             :   5400
    2452             : };
    2453             : 
    2454             : const Vertex TRAPEZOID_GLUE_POINTS[] =
    2455             : {
    2456             :   {CALCULATED_VALUE(6), 10800}, {10800, 21600}, {CALCULATED_VALUE(5), 10800}, {10800, 0}
    2457             : };
    2458             : 
    2459           0 : const CustomShape CS_TRAPEZOID(
    2460             :   TRAPEZOID_VERTICES, sizeof(TRAPEZOID_VERTICES) / sizeof(Vertex),
    2461             :   TRAPEZOID_SEGMENTS, sizeof(TRAPEZOID_SEGMENTS) / sizeof(unsigned short),
    2462             :   TRAPEZOID_CALC, sizeof(TRAPEZOID_CALC) / sizeof(Calculation),
    2463             :   TRAPEZOID_DEFAULT_ADJUST, sizeof(TRAPEZOID_DEFAULT_ADJUST) / sizeof(int),
    2464             :   TRAPEZOID_TRS, sizeof(TRAPEZOID_TRS) / sizeof(TextRectangle),
    2465             :   21600, 21600,
    2466             :   TRAPEZOID_GLUE_POINTS, sizeof(TRAPEZOID_GLUE_POINTS) / sizeof(Vertex));
    2467             : 
    2468             : const Vertex DIAMOND_VERTICES[] =
    2469             : {
    2470             :   {10800, 0}, {21600, 10800}, {10800, 21600}, {0, 10800}, {10800, 0}
    2471             : };
    2472             : 
    2473             : const TextRectangle DIAMOND_TRS[] =
    2474             : {
    2475             :   { {5400, 5400}, {16200, 16200} }
    2476             : };
    2477             : 
    2478             : const Vertex DIAMOND_GLUE_POINTS[] =
    2479             : {
    2480             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2481             : };
    2482             : 
    2483           0 : const CustomShape CS_DIAMOND(
    2484             :   DIAMOND_VERTICES, sizeof(DIAMOND_VERTICES) / sizeof(Vertex),
    2485             :   NULL, 0,
    2486             :   NULL, 0,
    2487             :   NULL, 0,
    2488             :   DIAMOND_TRS, sizeof(DIAMOND_TRS) / sizeof(TextRectangle),
    2489             :   21600, 21600,
    2490             :   DIAMOND_GLUE_POINTS, sizeof(DIAMOND_GLUE_POINTS) / sizeof(Vertex));
    2491             : 
    2492             : const Vertex RIGHT_TRIANGLE_VERTICES[] =
    2493             : {
    2494             :   {0, 0}, {21600, 21600}, {0, 21600}, {0, 0}
    2495             : };
    2496             : 
    2497             : const TextRectangle RIGHT_TRIANGLE_TRS[] =
    2498             : {
    2499             :   { {1900, 12700}, {12700, 19700} }
    2500             : };
    2501             : 
    2502             : const Vertex RIGHT_TRIANGLE_GLUE_POINTS[] =
    2503             : {
    2504             :   {10800, 0}, {5400, 10800}, {0, 21600}, {10800, 21600}, {21600, 21600}, {16200, 10800}
    2505             : };
    2506             : 
    2507           0 : const CustomShape CS_RIGHT_TRIANGLE(
    2508             :   RIGHT_TRIANGLE_VERTICES, sizeof(RIGHT_TRIANGLE_VERTICES) / sizeof(Vertex),
    2509             :   NULL, 0,
    2510             :   NULL, 0,
    2511             :   NULL, 0,
    2512             :   RIGHT_TRIANGLE_TRS, sizeof(RIGHT_TRIANGLE_TRS) / sizeof(TextRectangle),
    2513             :   21600, 21600,
    2514             :   RIGHT_TRIANGLE_GLUE_POINTS, sizeof(RIGHT_TRIANGLE_GLUE_POINTS) / sizeof(Vertex));
    2515             : 
    2516             : 
    2517             : const Vertex RECTANGLE_VERTICES[] =
    2518             : {
    2519             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}
    2520             : };
    2521             : 
    2522           0 : const CustomShape CS_RECTANGLE(
    2523             :   RECTANGLE_VERTICES, sizeof(RECTANGLE_VERTICES) / sizeof(Vertex),
    2524             :   NULL, 0,
    2525             :   NULL, 0,
    2526             :   NULL, 0,
    2527             :   NULL, 0,
    2528             :   21600, 21600,
    2529             :   NULL, 0);
    2530             : 
    2531             : const Vertex ELLIPSE_VERTICES[] =
    2532             : {
    2533             :   {10800, 10800}, {10800, 10800}, {0, 360}
    2534             : };
    2535             : 
    2536             : const unsigned short ELLIPSE_SEGMENTS[] =
    2537             : {
    2538             :   0xA203, 0x6000, 0x8000
    2539             : };
    2540             : 
    2541             : const TextRectangle ELLIPSE_TRS[] =
    2542             : {
    2543             :   { {3163, 3163}, {18437, 18437} }
    2544             : };
    2545             : 
    2546             : const Vertex ELLIPSE_GLUE_PTS[] =
    2547             : {
    2548             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600},
    2549             :   {18437, 18437}, {21600, 10800}, {18437, 3163}
    2550             : };
    2551             : 
    2552           0 : const CustomShape CS_ELLIPSE(
    2553             :   ELLIPSE_VERTICES, sizeof(ELLIPSE_VERTICES) / sizeof(Vertex),
    2554             :   ELLIPSE_SEGMENTS, sizeof(ELLIPSE_SEGMENTS) / sizeof(unsigned short),
    2555             :   NULL, 0,
    2556             :   NULL, 0,
    2557             :   ELLIPSE_TRS, sizeof(ELLIPSE_TRS) / sizeof(TextRectangle),
    2558             :   21600, 21600,
    2559             :   ELLIPSE_GLUE_PTS, sizeof(ELLIPSE_GLUE_PTS) / sizeof(Vertex));
    2560             : 
    2561             : const Vertex SEAL_4_VERTICES[] =
    2562             : {
    2563             :   {0, 10800}, {CALCULATED_VALUE(4), CALCULATED_VALUE(4)},
    2564             :   {10800, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)},
    2565             :   {21600, 10800}, {CALCULATED_VALUE(3), CALCULATED_VALUE(3)},
    2566             :   {10800, 21600}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)},
    2567             :   {0, 10800}
    2568             : };
    2569             : 
    2570             : const Calculation SEAL_4_CALC[] =
    2571             : {
    2572             :   {0x0000, 7600, 0, 0},
    2573             :   {0x6001, OTHER_CALC_VAL, PROP_ADJUST_VAL_FIRST, 10800},
    2574             :   {0xA000, OTHER_CALC_VAL, 0, OTHER_CALC_VAL | 1},
    2575             :   {0x4000, 10800, OTHER_CALC_VAL | 2, 0},
    2576             :   {0x8000, 10800, 0, OTHER_CALC_VAL | 2}
    2577             : };
    2578             : 
    2579             : const TextRectangle SEAL_4_TRS[] =
    2580             : {
    2581             :   { {CALCULATED_VALUE(4), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(3)} }
    2582             : };
    2583             : 
    2584             : const int SEAL_4_DEFAULT_ADJUST[] =
    2585             : {
    2586             :   8100
    2587             : };
    2588             : 
    2589           0 : const CustomShape CS_SEAL_4(
    2590             :   SEAL_4_VERTICES, sizeof(SEAL_4_VERTICES) / sizeof(Vertex),
    2591             :   NULL, 0,
    2592             :   SEAL_4_CALC, sizeof(SEAL_4_CALC) / sizeof(Calculation),
    2593             :   SEAL_4_DEFAULT_ADJUST, sizeof(SEAL_4_DEFAULT_ADJUST) / sizeof(int),
    2594             :   SEAL_4_TRS, sizeof(SEAL_4_TRS) / sizeof(TextRectangle),
    2595             :   21600, 21600,
    2596             :   NULL, 0);
    2597             : 
    2598             : const Vertex ISOCELES_TRIANGLE_VERTICES[] =
    2599             : {
    2600             :   {CALCULATED_VALUE(0), 0}, {21600, 21600}, {0, 21600}
    2601             : };
    2602             : 
    2603             : const unsigned short ISOCELES_TRIANGLE_SEGMENTS[] =
    2604             : {
    2605             :   0x4000, 0x0002, 0x6001, 0x8000
    2606             : };
    2607             : 
    2608             : const Calculation ISOCELES_TRIANGLE_CALC[] =
    2609             : {
    2610             :   {0x4000, 0, PROP_ADJUST_VAL_FIRST, 0},
    2611             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2},
    2612             :   {0x2000, OTHER_CALC_VAL | 1, 10800, 0},
    2613             :   {0x2001, PROP_ADJUST_VAL_FIRST, 2, 3},
    2614             :   {0x2000, OTHER_CALC_VAL | 3, 7200, 0},
    2615             :   {0x8000, 21600, 0, OTHER_CALC_VAL},
    2616             :   {0x2001, OTHER_CALC_VAL | 5, 1, 2},
    2617             :   {0x8000, 21600, 0, OTHER_CALC_VAL | 6}
    2618             : };
    2619             : 
    2620             : const TextRectangle ISOCELES_TRIANGLE_TRS[] =
    2621             : {
    2622             :   { {CALCULATED_VALUE(1), 10800}, {CALCULATED_VALUE(2), 18000} },
    2623             :   { {CALCULATED_VALUE(3), 7200}, {CALCULATED_VALUE(4), 21600} }
    2624             : };
    2625             : 
    2626             : const Vertex ISOCELES_TRIANGLE_GLUE_POINTS[] =
    2627             : {
    2628             :   {10800, 0}, {CALCULATED_VALUE(1), 10800},
    2629             :   {0, 21600}, {10800, 21600},
    2630             :   {21600, 21600}, {CALCULATED_VALUE(7), 10800}
    2631             : };
    2632             : 
    2633             : const int ISOCELES_TRIANGLE_DEFAULT_ADJUST[] =
    2634             : {
    2635             :   10800
    2636             : };
    2637             : 
    2638           0 : const CustomShape CS_ISOCELES_TRIANGLE(
    2639             :   ISOCELES_TRIANGLE_VERTICES, sizeof(ISOCELES_TRIANGLE_VERTICES) / sizeof(Vertex),
    2640             :   ISOCELES_TRIANGLE_SEGMENTS, sizeof(ISOCELES_TRIANGLE_SEGMENTS) / sizeof(unsigned short),
    2641             :   ISOCELES_TRIANGLE_CALC, sizeof(ISOCELES_TRIANGLE_CALC) / sizeof(Calculation),
    2642             :   ISOCELES_TRIANGLE_DEFAULT_ADJUST, sizeof(ISOCELES_TRIANGLE_DEFAULT_ADJUST) / sizeof(int),
    2643             :   ISOCELES_TRIANGLE_TRS, sizeof(ISOCELES_TRIANGLE_TRS) / sizeof(TextRectangle),
    2644             :   21600, 21600,
    2645             :   ISOCELES_TRIANGLE_GLUE_POINTS, sizeof(ISOCELES_TRIANGLE_GLUE_POINTS) / sizeof(Vertex));
    2646             : 
    2647             : const Vertex PARALLELOGRAM_VERTICES[] =
    2648             : {
    2649             :   {CALCULATED_VALUE(0), 0}, {21600, 0}, {CALCULATED_VALUE(1), 21600}, {0, 21600}
    2650             : };
    2651             : 
    2652             : const unsigned short PARALLELOGRAM_SEGMENTS[] =
    2653             : {
    2654             :   0x4000, 0x003, 0x6001, 0x8000
    2655             : };
    2656             : 
    2657             : const Calculation PARALLELOGRAM_CALC[] =
    2658             : {
    2659             :   {0x4000, 0, PROP_ADJUST_VAL_FIRST, 0}, {0x8000, 0, 21600, PROP_ADJUST_VAL_FIRST}, {0x2001, PROP_ADJUST_VAL_FIRST, 10, 24}, {0x2000, OTHER_CALC_VAL | 2, 1750, 0}, {0x8000, 21600, 0, OTHER_CALC_VAL | 3}, {0x2001, OTHER_CALC_VAL, 1, 2}, {0x4000, 10800, OTHER_CALC_VAL | 5, 0}, {0x2000, OTHER_CALC_VAL, 0, 10800}, {0x6006, OTHER_CALC_VAL | 7, OTHER_CALC_VAL | 0xC, 21600}, {0x8000, 21600, 0, OTHER_CALC_VAL | 5}, {0x8001, 21600, 10800, OTHER_CALC_VAL}, {0x8000, 21600, 0, OTHER_CALC_VAL | 0xC}
    2660             : };
    2661             : 
    2662             : const TextRectangle PARALLELOGRAM_TRS[] =
    2663             : {
    2664             :   { {CALCULATED_VALUE(3), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(4)} }
    2665             : };
    2666             : 
    2667             : const int PARALLELOGRAM_DEFAULT_ADJUST[] =
    2668             : {
    2669             :   5400
    2670             : };
    2671             : 
    2672             : const Vertex PARALLELOGRAM_GLUE_POINTS[] =
    2673             : {
    2674             :   {CALCULATED_VALUE(6), 0}, {10800, CALCULATED_VALUE(8)}, {CALCULATED_VALUE(11), 10800}, {CALCULATED_VALUE(9), 21600}, {10800, CALCULATED_VALUE(10)}, {CALCULATED_VALUE(5), 10800}
    2675             : };
    2676             : 
    2677           0 : const CustomShape CS_PARALLELOGRAM(
    2678             :   PARALLELOGRAM_VERTICES, sizeof(PARALLELOGRAM_VERTICES) / sizeof(Vertex),
    2679             :   PARALLELOGRAM_SEGMENTS, sizeof(PARALLELOGRAM_SEGMENTS) / sizeof(unsigned short),
    2680             :   PARALLELOGRAM_CALC, sizeof(PARALLELOGRAM_CALC) / sizeof(Calculation),
    2681             :   PARALLELOGRAM_DEFAULT_ADJUST, sizeof(PARALLELOGRAM_DEFAULT_ADJUST) / sizeof(int),
    2682             :   PARALLELOGRAM_TRS, sizeof(PARALLELOGRAM_TRS) / sizeof(TextRectangle),
    2683             :   21600, 21600,
    2684             :   PARALLELOGRAM_GLUE_POINTS, sizeof(PARALLELOGRAM_GLUE_POINTS) / sizeof(Vertex));
    2685             : 
    2686             : const Vertex HEXAGON_VERTICES[] =
    2687             : {
    2688             :   {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(1), 0}, {21600, 10800}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(0), 21600}, {0, 10800}
    2689             : };
    2690             : 
    2691             : const unsigned short HEXAGON_SEGMENTS[] =
    2692             : {
    2693             :   0x4000, 0x0005, 0x6001, 0x8000
    2694             : };
    2695             : 
    2696             : const Calculation HEXAGON_CALC[] =
    2697             : {
    2698             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, PROP_ADJUST_VAL_FIRST, 100, 234}, {0x2000, OTHER_CALC_VAL | 2, 1700, 0}, {0x8000, 21600, 0, OTHER_CALC_VAL | 3}
    2699             : };
    2700             : 
    2701             : const TextRectangle HEXAGON_TRS[] =
    2702             : {
    2703             :   { {CALCULATED_VALUE(3), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(4)} }
    2704             : };
    2705             : 
    2706             : const int HEXAGON_DEFAULT_ADJUST[] =
    2707             : {
    2708             :   5400
    2709             : };
    2710             : 
    2711             : const Vertex HEXAGON_GLUE_POINTS[] =
    2712             : {
    2713             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2714             : };
    2715             : 
    2716           0 : const CustomShape CS_HEXAGON(
    2717             :   HEXAGON_VERTICES, sizeof(HEXAGON_VERTICES) / sizeof(Vertex),
    2718             :   HEXAGON_SEGMENTS, sizeof(HEXAGON_SEGMENTS) / sizeof(unsigned short),
    2719             :   HEXAGON_CALC, sizeof(HEXAGON_CALC) / sizeof(Calculation),
    2720             :   HEXAGON_DEFAULT_ADJUST, sizeof(HEXAGON_DEFAULT_ADJUST) / sizeof(int),
    2721             :   HEXAGON_TRS, sizeof(HEXAGON_TRS) / sizeof(TextRectangle),
    2722             :   21600, 21600,
    2723             :   HEXAGON_GLUE_POINTS, sizeof(HEXAGON_GLUE_POINTS) / sizeof(Vertex));
    2724             : 
    2725             : const Vertex FLOW_CHART_SUMMING_JUNCTION_VERTICES[] =
    2726             : {
    2727             :   {10800, 10800}, {10800, 10800}, {0, 360}, {3100, 3100}, {18500, 18500}, {3100, 18500}, {18500, 3100}
    2728             : };
    2729             : 
    2730             : const unsigned short FLOW_CHART_SUMMING_JUNCTION_SEGMENTS[] =
    2731             : {
    2732             :   0xa203, 0x6000, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    2733             : };
    2734             : 
    2735             : const TextRectangle FLOW_CHART_SUMMING_JUNCTION_TRS[] =
    2736             : {
    2737             :   { {3100, 3100}, {18500, 18500} }
    2738             : };
    2739             : 
    2740             : const Vertex FLOW_CHART_SUMMING_JUNCTION_GLUE_POINTS[] =
    2741             : {
    2742             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
    2743             : };
    2744             : 
    2745           0 : const CustomShape CS_FLOW_CHART_SUMMING_JUNCTION(
    2746             :   FLOW_CHART_SUMMING_JUNCTION_VERTICES, sizeof(FLOW_CHART_SUMMING_JUNCTION_VERTICES) / sizeof(Vertex),
    2747             :   FLOW_CHART_SUMMING_JUNCTION_SEGMENTS, sizeof(FLOW_CHART_SUMMING_JUNCTION_SEGMENTS) / sizeof(unsigned short),
    2748             :   NULL, 0,
    2749             :   NULL, 0,
    2750             :   FLOW_CHART_SUMMING_JUNCTION_TRS, sizeof(FLOW_CHART_SUMMING_JUNCTION_TRS) / sizeof(TextRectangle),
    2751             :   21600, 21600,
    2752             :   FLOW_CHART_SUMMING_JUNCTION_GLUE_POINTS, sizeof(FLOW_CHART_SUMMING_JUNCTION_GLUE_POINTS) / sizeof(Vertex));
    2753             : 
    2754             : const Vertex FLOW_CHART_PREPARATION_VERTICES[] =
    2755             : {
    2756             :   {4350, 0}, {17250, 0}, {21600, 10800}, {17250, 21600}, {4350, 21600}, {0, 10800}, {4350, 0}
    2757             : };
    2758             : 
    2759             : const TextRectangle FLOW_CHART_PREPARATION_TRS[] =
    2760             : {
    2761             :   { {4350, 0}, {17250, 21600} }
    2762             : };
    2763             : 
    2764             : const Vertex FLOW_CHART_PREPARATION_GLUE_POINTS[] =
    2765             : {
    2766             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2767             : };
    2768             : 
    2769           0 : const CustomShape CS_FLOW_CHART_PREPARATION(
    2770             :   FLOW_CHART_PREPARATION_VERTICES, sizeof(FLOW_CHART_PREPARATION_VERTICES) / sizeof(Vertex),
    2771             :   NULL, 0,
    2772             :   NULL, 0,
    2773             :   NULL, 0,
    2774             :   FLOW_CHART_PREPARATION_TRS, sizeof(FLOW_CHART_PREPARATION_TRS) / sizeof(TextRectangle),
    2775             :   21600, 21600,
    2776             :   FLOW_CHART_PREPARATION_GLUE_POINTS, sizeof(FLOW_CHART_PREPARATION_GLUE_POINTS) / sizeof(Vertex));
    2777             : 
    2778             : const Vertex FLOW_CHART_PUNCHED_TAPE_VERTICES[] =
    2779             : {
    2780             :   {0, 2230}, {820, 3990}, {3410, 3980}, {5370, 4360}, {7430, 4030}, {10110, 3890}, {10690, 2270}, {11440, 300}, {14200, 160}, {16150, 0}, {18670, 170}, {20690, 390}, {21600, 2230}, {21600, 19420}, {20640, 17510}, {18320, 17490}, {16140, 17240}, {14710, 17370}, {11310, 17510}, {10770, 19430}, {10150, 21150}, {7380, 21290}, {5290, 21600}, {3220, 21250}, {610, 21130}, {0, 19420}
    2781             : };
    2782             : 
    2783             : const unsigned short FLOW_CHART_PUNCHED_TAPE_SEGMENTS[] =
    2784             : {
    2785             :   0x4000, 0x2004, 0x0001, 0x2004, 0x6000, 0x8000
    2786             : };
    2787             : 
    2788             : const TextRectangle FLOW_CHART_PUNCHED_TAPE_TRS[] =
    2789             : {
    2790             :   { {0, 4360}, {21600, 17240} }
    2791             : };
    2792             : 
    2793             : const Vertex FLOW_CHART_PUNCHED_TAPE_GLUE_POINTS[] =
    2794             : {
    2795             :   {10800, 2020}, {0, 10800}, {10800, 19320}, {21600, 10800}
    2796             : };
    2797             : 
    2798           0 : const CustomShape CS_FLOW_CHART_PUNCHED_TAPE(
    2799             :   FLOW_CHART_PUNCHED_TAPE_VERTICES, sizeof(FLOW_CHART_PUNCHED_TAPE_VERTICES) / sizeof(Vertex),
    2800             :   FLOW_CHART_PUNCHED_TAPE_SEGMENTS, sizeof(FLOW_CHART_PUNCHED_TAPE_SEGMENTS) / sizeof(unsigned short),
    2801             :   NULL, 0,
    2802             :   NULL, 0,
    2803             :   FLOW_CHART_PUNCHED_TAPE_TRS, sizeof(FLOW_CHART_PUNCHED_TAPE_TRS) / sizeof(TextRectangle),
    2804             :   21600, 21600,
    2805             :   FLOW_CHART_PUNCHED_TAPE_GLUE_POINTS, sizeof(FLOW_CHART_PUNCHED_TAPE_GLUE_POINTS) / sizeof(Vertex));
    2806             : 
    2807             : const Vertex FLOW_CHART_PUNCHED_CARD_VERTICES[] =
    2808             : {
    2809             :   {4300, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 4300}, {4300, 0}
    2810             : };
    2811             : 
    2812             : const TextRectangle FLOW_CHART_PUNCHED_CARD_TRS[] =
    2813             : {
    2814             :   { {0, 4300}, {21600, 21600} }
    2815             : };
    2816             : 
    2817             : const Vertex FLOW_CHART_PUNCHED_CARD_GLUE_POINTS[] =
    2818             : {
    2819             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    2820             : };
    2821             : 
    2822           0 : const CustomShape CS_FLOW_CHART_PUNCHED_CARD(
    2823             :   FLOW_CHART_PUNCHED_CARD_VERTICES, sizeof(FLOW_CHART_PUNCHED_CARD_VERTICES) / sizeof(Vertex),
    2824             :   NULL, 0,
    2825             :   NULL, 0,
    2826             :   NULL, 0,
    2827             :   FLOW_CHART_PUNCHED_CARD_TRS, sizeof(FLOW_CHART_PUNCHED_CARD_TRS) / sizeof(TextRectangle),
    2828             :   21600, 21600,
    2829             :   FLOW_CHART_PUNCHED_CARD_GLUE_POINTS, sizeof(FLOW_CHART_PUNCHED_CARD_GLUE_POINTS) / sizeof(Vertex));
    2830             : 
    2831             : const Vertex FLOW_CHART_CONNECTOR_VERTICES[] =
    2832             : {
    2833             :   {10800, 10800}, {10800, 10800}, {0, 360}
    2834             : };
    2835             : 
    2836             : const unsigned short FLOW_CHART_CONNECTOR_SEGMENTS[] =
    2837             : {
    2838             :   0xa203, 0x6000, 0x8000
    2839             : };
    2840             : 
    2841             : const TextRectangle FLOW_CHART_CONNECTOR_TRS[] =
    2842             : {
    2843             :   { {3180, 3180}, {18420, 18420} }
    2844             : };
    2845             : 
    2846             : const Vertex FLOW_CHART_CONNECTOR_GLUE_POINTS[] =
    2847             : {
    2848             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
    2849             : };
    2850             : 
    2851           0 : const CustomShape CS_FLOW_CHART_CONNECTOR(
    2852             :   FLOW_CHART_CONNECTOR_VERTICES, sizeof(FLOW_CHART_CONNECTOR_VERTICES) / sizeof(Vertex),
    2853             :   FLOW_CHART_CONNECTOR_SEGMENTS, sizeof(FLOW_CHART_CONNECTOR_SEGMENTS) / sizeof(unsigned short),
    2854             :   NULL, 0,
    2855             :   NULL, 0,
    2856             :   FLOW_CHART_CONNECTOR_TRS, sizeof(FLOW_CHART_CONNECTOR_TRS) / sizeof(TextRectangle),
    2857             :   21600, 21600,
    2858             :   FLOW_CHART_CONNECTOR_GLUE_POINTS, sizeof(FLOW_CHART_CONNECTOR_GLUE_POINTS) / sizeof(Vertex));
    2859             : 
    2860             : const Vertex FLOW_CHART_MANUAL_OPERATION_VERTICES[] =
    2861             : {
    2862             :   {0, 0}, {21600, 0}, {17250, 21600}, {4350, 21600}, {0, 0}
    2863             : };
    2864             : 
    2865             : const TextRectangle FLOW_CHART_MANUAL_OPERATION_TRS[] =
    2866             : {
    2867             :   { {4350, 0}, {17250, 21600} }
    2868             : };
    2869             : 
    2870             : const Vertex FLOW_CHART_MANUAL_OPERATION_GLUE_POINTS[] =
    2871             : {
    2872             :   {10800, 0}, {2160, 10800}, {10800, 21600}, {19440, 10800}
    2873             : };
    2874             : 
    2875           0 : const CustomShape CS_FLOW_CHART_MANUAL_OPERATION(
    2876             :   FLOW_CHART_MANUAL_OPERATION_VERTICES, sizeof(FLOW_CHART_MANUAL_OPERATION_VERTICES) / sizeof(Vertex),
    2877             :   NULL, 0,
    2878             :   NULL, 0,
    2879             :   NULL, 0,
    2880             :   FLOW_CHART_MANUAL_OPERATION_TRS, sizeof(FLOW_CHART_MANUAL_OPERATION_TRS) / sizeof(TextRectangle),
    2881             :   21600, 21600,
    2882             :   FLOW_CHART_MANUAL_OPERATION_GLUE_POINTS, sizeof(FLOW_CHART_MANUAL_OPERATION_GLUE_POINTS) / sizeof(Vertex));
    2883             : 
    2884             : const Vertex FLOW_CHART_MANUAL_INPUT_VERTICES[] =
    2885             : {
    2886             :   {0, 4300}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 4300}
    2887             : };
    2888             : 
    2889             : const TextRectangle FLOW_CHART_MANUAL_INPUT_TRS[] =
    2890             : {
    2891             :   { {0, 4300}, {21600, 21600} }
    2892             : };
    2893             : 
    2894             : const Vertex FLOW_CHART_MANUAL_INPUT_GLUE_POINTS[] =
    2895             : {
    2896             :   {10800, 2150}, {0, 10800}, {10800, 19890}, {21600, 10800}
    2897             : };
    2898             : 
    2899           0 : const CustomShape CS_FLOW_CHART_MANUAL_INPUT(
    2900             :   FLOW_CHART_MANUAL_INPUT_VERTICES, sizeof(FLOW_CHART_MANUAL_INPUT_VERTICES) / sizeof(Vertex),
    2901             :   NULL, 0,
    2902             :   NULL, 0,
    2903             :   NULL, 0,
    2904             :   FLOW_CHART_MANUAL_INPUT_TRS, sizeof(FLOW_CHART_MANUAL_INPUT_TRS) / sizeof(TextRectangle),
    2905             :   21600, 21600,
    2906             :   FLOW_CHART_MANUAL_INPUT_GLUE_POINTS, sizeof(FLOW_CHART_MANUAL_INPUT_GLUE_POINTS) / sizeof(Vertex));
    2907             : 
    2908             : 
    2909             : const Vertex FLOW_CHART_OR_VERTICES[] =
    2910             : {
    2911             :   {10800, 10800}, {10800, 10800}, {0, 360}, {0, 10800}, {21600, 10800}, {10800, 0}, {10800, 21600}
    2912             : };
    2913             : 
    2914             : const unsigned short FLOW_CHART_OR_SEGMENTS[] =
    2915             : {
    2916             :   0xa203, 0x6000, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    2917             : };
    2918             : 
    2919             : const TextRectangle FLOW_CHART_OR_TRS[] =
    2920             : {
    2921             :   { {3100, 3100}, {18500, 18500} }
    2922             : };
    2923             : 
    2924             : const Vertex FLOW_CHART_OR_GLUE_POINTS[] =
    2925             : {
    2926             :   {10800, 0}, {3163, 3163}, {0, 10800}, {3163, 18437}, {10800, 21600}, {18437, 18437}, {21600, 10800}, {18437, 3163}
    2927             : };
    2928             : 
    2929           0 : const CustomShape CS_FLOW_CHART_OR(
    2930             :   FLOW_CHART_OR_VERTICES, sizeof(FLOW_CHART_OR_VERTICES) / sizeof(Vertex),
    2931             :   FLOW_CHART_OR_SEGMENTS, sizeof(FLOW_CHART_OR_SEGMENTS) / sizeof(unsigned short),
    2932             :   NULL, 0,
    2933             :   NULL, 0,
    2934             :   FLOW_CHART_OR_TRS, sizeof(FLOW_CHART_OR_TRS) / sizeof(TextRectangle),
    2935             :   21600, 21600,
    2936             :   FLOW_CHART_OR_GLUE_POINTS, sizeof(FLOW_CHART_OR_GLUE_POINTS) / sizeof(Vertex));
    2937             : 
    2938             : const Vertex FLOW_CHART_COLLATE_VERTICES[] =
    2939             : {
    2940             :   {0, 0}, {21600, 21600}, {0, 21600}, {21600, 0}, {0, 0}
    2941             : };
    2942             : 
    2943             : const TextRectangle FLOW_CHART_COLLATE_TRS[] =
    2944             : {
    2945             :   { {5400, 5400}, {16200, 16200} }
    2946             : };
    2947             : 
    2948             : const Vertex FLOW_CHART_COLLATE_GLUE_POINTS[] =
    2949             : {
    2950             :   {10800, 0}, {10800, 10800}, {10800, 21600}
    2951             : };
    2952             : 
    2953           0 : const CustomShape CS_FLOW_CHART_COLLATE(
    2954             :   FLOW_CHART_COLLATE_VERTICES, sizeof(FLOW_CHART_COLLATE_VERTICES) / sizeof(Vertex),
    2955             :   NULL, 0,
    2956             :   NULL, 0,
    2957             :   NULL, 0,
    2958             :   FLOW_CHART_COLLATE_TRS, sizeof(FLOW_CHART_COLLATE_TRS) / sizeof(TextRectangle),
    2959             :   21600, 21600,
    2960             :   FLOW_CHART_COLLATE_GLUE_POINTS, sizeof(FLOW_CHART_COLLATE_GLUE_POINTS) / sizeof(Vertex));
    2961             : 
    2962             : const Vertex FLOW_CHART_SORT_VERTICES[] =
    2963             : {
    2964             :   {0, 10800}, {10800, 0}, {21600, 10800}, {10800, 21600}, {0, 10800}, {21600, 10800}
    2965             : };
    2966             : 
    2967             : const unsigned short FLOW_CHART_SORT_SEGMENTS[] =
    2968             : {
    2969             :   0x4000, 0x0003, 0x6000, 0x8000, 0x4000, 0x0001, 0x8000
    2970             : };
    2971             : 
    2972             : const TextRectangle FLOW_CHART_SORT_TRS[] =
    2973             : {
    2974             :   { {5400, 5400}, {16200, 16200} }
    2975             : };
    2976             : 
    2977           0 : const CustomShape CS_FLOW_CHART_SORT(
    2978             :   FLOW_CHART_SORT_VERTICES, sizeof(FLOW_CHART_SORT_VERTICES) / sizeof(Vertex),
    2979             :   FLOW_CHART_SORT_SEGMENTS, sizeof(FLOW_CHART_SORT_SEGMENTS) / sizeof(unsigned short),
    2980             :   NULL, 0,
    2981             :   NULL, 0,
    2982             :   FLOW_CHART_SORT_TRS, sizeof(FLOW_CHART_SORT_TRS) / sizeof(TextRectangle),
    2983             :   21600, 21600,
    2984             :   NULL, 0);
    2985             : 
    2986             : const Vertex FLOW_CHART_EXTRACT_VERTICES[] =
    2987             : {
    2988             :   {10800, 0}, {21600, 21600}, {0, 21600}, {10800, 0}
    2989             : };
    2990             : 
    2991             : const TextRectangle FLOW_CHART_EXTRACT_TRS[] =
    2992             : {
    2993             :   { {5400, 10800}, {16200, 21600} }
    2994             : };
    2995             : 
    2996             : const Vertex FLOW_CHART_EXTRACT_GLUE_POINTS[] =
    2997             : {
    2998             :   {10800, 0}, {5400, 10800}, {10800, 21600}, {16200, 10800}
    2999             : };
    3000             : 
    3001           0 : const CustomShape CS_FLOW_CHART_EXTRACT(
    3002             :   FLOW_CHART_EXTRACT_VERTICES, sizeof(FLOW_CHART_EXTRACT_VERTICES) / sizeof(Vertex),
    3003             :   NULL, 0,
    3004             :   NULL, 0,
    3005             :   NULL, 0,
    3006             :   FLOW_CHART_EXTRACT_TRS, sizeof(FLOW_CHART_EXTRACT_TRS) / sizeof(TextRectangle),
    3007             :   21600, 21600,
    3008             :   FLOW_CHART_EXTRACT_GLUE_POINTS, sizeof(FLOW_CHART_EXTRACT_GLUE_POINTS) / sizeof(Vertex));
    3009             : 
    3010             : const Vertex FLOW_CHART_MERGE_VERTICES[] =
    3011             : {
    3012             :   {0, 0}, {21600, 0}, {10800, 21600}, {0, 0}
    3013             : };
    3014             : 
    3015             : const TextRectangle FLOW_CHART_MERGE_TRS[] =
    3016             : {
    3017             :   { {5400, 0}, {16200, 10800} }
    3018             : };
    3019             : 
    3020             : const Vertex FLOW_CHART_MERGE_GLUE_POINTS[] =
    3021             : {
    3022             :   {10800, 0}, {5400, 10800}, {10800, 21600}, {16200, 10800}
    3023             : };
    3024             : 
    3025           0 : const CustomShape CS_FLOW_CHART_MERGE(
    3026             :   FLOW_CHART_MERGE_VERTICES, sizeof(FLOW_CHART_MERGE_VERTICES) / sizeof(Vertex),
    3027             :   NULL, 0,
    3028             :   NULL, 0,
    3029             :   NULL, 0,
    3030             :   FLOW_CHART_MERGE_TRS, sizeof(FLOW_CHART_MERGE_TRS) / sizeof(TextRectangle),
    3031             :   21600, 21600,
    3032             :   FLOW_CHART_MERGE_GLUE_POINTS, sizeof(FLOW_CHART_MERGE_GLUE_POINTS) / sizeof(Vertex));
    3033             : 
    3034             : const Vertex FLOW_CHART_ONLINE_STORAGE_VERTICES[] =
    3035             : {
    3036             :   {3600, 21600}, {0, 10800}, {3600, 0}, {21600, 0}, {18000, 10800}, {21600, 21600}
    3037             : };
    3038             : 
    3039             : const unsigned short FLOW_CHART_ONLINE_STORAGE_SEGMENTS[] =
    3040             : {
    3041             :   0x4000, 0xa702, 0x0001, 0xa702, 0x6000, 0x8000
    3042             : };
    3043             : 
    3044             : const TextRectangle FLOW_CHART_ONLINE_STORAGE_TRS[] =
    3045             : {
    3046             :   { {3600, 0}, {18000, 21600} }
    3047             : };
    3048             : 
    3049             : const Vertex FLOW_CHART_ONLINE_STORAGE_GLUE_POINTS[] =
    3050             : {
    3051             :   {10800, 0}, {0, 10800}, {10800, 21600}, {18000, 10800}
    3052             : };
    3053             : 
    3054           0 : const CustomShape CS_FLOW_CHART_ONLINE_STORAGE(
    3055             :   FLOW_CHART_ONLINE_STORAGE_VERTICES, sizeof(FLOW_CHART_ONLINE_STORAGE_VERTICES) / sizeof(Vertex),
    3056             :   FLOW_CHART_ONLINE_STORAGE_SEGMENTS, sizeof(FLOW_CHART_ONLINE_STORAGE_SEGMENTS) / sizeof(unsigned short),
    3057             :   NULL, 0,
    3058             :   NULL, 0,
    3059             :   FLOW_CHART_ONLINE_STORAGE_TRS, sizeof(FLOW_CHART_ONLINE_STORAGE_TRS) / sizeof(TextRectangle),
    3060             :   21600, 21600,
    3061             :   FLOW_CHART_ONLINE_STORAGE_GLUE_POINTS, sizeof(FLOW_CHART_ONLINE_STORAGE_GLUE_POINTS) / sizeof(Vertex));
    3062             : 
    3063             : const Vertex FLOW_CHART_MAGNETIC_TAPE_VERTICES[] =
    3064             : {
    3065             :   {20980, 18150}, {20980, 21600}, {10670, 21600}, {4770, 21540}, {0, 16720}, {0, 10800}, {0, 4840}, {4840, 0}, {10800, 0}, {16740, 0}, {21600, 4840}, {21600, 10800}, {21600, 13520}, {20550, 16160}, {18670, 18170}
    3066             : };
    3067             : 
    3068             : const unsigned short FLOW_CHART_MAGNETIC_TAPE_SEGMENTS[] =
    3069             : {
    3070             :   0x4000, 0x0002, 0x2004, 0x6000, 0x8000
    3071             : };
    3072             : 
    3073             : const TextRectangle FLOW_CHART_MAGNETIC_TAPE_TRS[] =
    3074             : {
    3075             :   { {3100, 3100}, {18500, 18500} }
    3076             : };
    3077             : 
    3078             : const Vertex FLOW_CHART_MAGNETIC_TAPE_GLUE_POINTS[] =
    3079             : {
    3080             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    3081             : };
    3082             : 
    3083           0 : const CustomShape CS_FLOW_CHART_MAGNETIC_TAPE(
    3084             :   FLOW_CHART_MAGNETIC_TAPE_VERTICES, sizeof(FLOW_CHART_MAGNETIC_TAPE_VERTICES) / sizeof(Vertex),
    3085             :   FLOW_CHART_MAGNETIC_TAPE_SEGMENTS, sizeof(FLOW_CHART_MAGNETIC_TAPE_SEGMENTS) / sizeof(unsigned short),
    3086             :   NULL, 0,
    3087             :   NULL, 0,
    3088             :   FLOW_CHART_MAGNETIC_TAPE_TRS, sizeof(FLOW_CHART_MAGNETIC_TAPE_TRS) / sizeof(TextRectangle),
    3089             :   21600, 21600,
    3090             :   FLOW_CHART_MAGNETIC_TAPE_GLUE_POINTS, sizeof(FLOW_CHART_MAGNETIC_TAPE_GLUE_POINTS) / sizeof(Vertex));
    3091             : 
    3092             : const Vertex FLOW_CHART_MAGNETIC_DISK_VERTICES[] =
    3093             : {
    3094             :   {0, 3400}, {10800, 0}, {21600, 3400}, {21600, 18200}, {10800, 21600}, {0, 18200}, {0, 3400}, {10800, 6800}, {21600, 3400}
    3095             : };
    3096             : 
    3097             : const unsigned short FLOW_CHART_MAGNETIC_DISK_SEGMENTS[] =
    3098             : {
    3099             :   0x4000, 0xa802, 0x0001, 0xa802, 0x6000, 0x8000, 0x4000, 0xa802, 0x8000
    3100             : };
    3101             : 
    3102             : const TextRectangle FLOW_CHART_MAGNETIC_DISK_TRS[] =
    3103             : {
    3104             :   { {0, 6800}, {21600, 18200} }
    3105             : };
    3106             : 
    3107             : const Vertex FLOW_CHART_MAGNETIC_DISK_GLUE_POINTS[] =
    3108             : {
    3109             :   {10800, 6800}, {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    3110             : };
    3111             : 
    3112           0 : const CustomShape CS_FLOW_CHART_MAGNETIC_DISK(
    3113             :   FLOW_CHART_MAGNETIC_DISK_VERTICES, sizeof(FLOW_CHART_MAGNETIC_DISK_VERTICES) / sizeof(Vertex),
    3114             :   FLOW_CHART_MAGNETIC_DISK_SEGMENTS, sizeof(FLOW_CHART_MAGNETIC_DISK_SEGMENTS) / sizeof(unsigned short),
    3115             :   NULL, 0,
    3116             :   NULL, 0,
    3117             :   FLOW_CHART_MAGNETIC_DISK_TRS, sizeof(FLOW_CHART_MAGNETIC_DISK_TRS) / sizeof(TextRectangle),
    3118             :   21600, 21600,
    3119             :   FLOW_CHART_MAGNETIC_DISK_GLUE_POINTS, sizeof(FLOW_CHART_MAGNETIC_DISK_GLUE_POINTS) / sizeof(Vertex));
    3120             : 
    3121             : const Vertex FLOW_CHART_MAGNETIC_DRUM_VERTICES[] =
    3122             : {
    3123             :   {18200, 0}, {21600, 10800}, {18200, 21600}, {3400, 21600}, {0, 10800}, {3400, 0}, {18200, 0}, {14800, 10800}, {18200, 21600}
    3124             : };
    3125             : 
    3126             : const unsigned short FLOW_CHART_MAGNETIC_DRUM_SEGMENTS[] =
    3127             : {
    3128             :   0x4000, 0xa702, 0x0001, 0xa702, 0x6000, 0x8000, 0x4000, 0xa702, 0x8000
    3129             : };
    3130             : 
    3131             : const TextRectangle FLOW_CHART_MAGNETIC_DRUM_TRS[] =
    3132             : {
    3133             :   { {3400, 0}, {14800, 21600} }
    3134             : };
    3135             : 
    3136             : const Vertex FLOW_CHART_MAGNETIC_DRUM_GLUE_POINTS[] =
    3137             : {
    3138             :   {10800, 0}, {0, 10800}, {10800, 21600}, {14800, 10800}, {21600, 10800}
    3139             : };
    3140             : 
    3141           0 : const CustomShape CS_FLOW_CHART_MAGNETIC_DRUM(
    3142             :   FLOW_CHART_MAGNETIC_DRUM_VERTICES, sizeof(FLOW_CHART_MAGNETIC_DRUM_VERTICES) / sizeof(Vertex),
    3143             :   FLOW_CHART_MAGNETIC_DRUM_SEGMENTS, sizeof(FLOW_CHART_MAGNETIC_DRUM_SEGMENTS) / sizeof(unsigned short),
    3144             :   NULL, 0,
    3145             :   NULL, 0,
    3146             :   FLOW_CHART_MAGNETIC_DRUM_TRS, sizeof(FLOW_CHART_MAGNETIC_DRUM_TRS) / sizeof(TextRectangle),
    3147             :   21600, 21600,
    3148             :   FLOW_CHART_MAGNETIC_DRUM_GLUE_POINTS, sizeof(FLOW_CHART_MAGNETIC_DRUM_GLUE_POINTS) / sizeof(Vertex));
    3149             : 
    3150             : const Vertex FLOW_CHART_DIPSLAY_VERTICES[] =
    3151             : {
    3152             :   {3600, 0}, {17800, 0}, {21600, 10800}, {17800, 21600}, {3600, 21600}, {0, 10800}
    3153             : };
    3154             : 
    3155             : const unsigned short FLOW_CHART_DIPSLAY_SEGMENTS[] =
    3156             : {
    3157             :   0x4000, 0x0001, 0xa702, 0x0002, 0x6000, 0x8000
    3158             : };
    3159             : 
    3160             : const TextRectangle FLOW_CHART_DIPSLAY_TRS[] =
    3161             : {
    3162             :   { {3600, 0}, {17800, 21600} }
    3163             : };
    3164             : 
    3165             : const Vertex FLOW_CHART_DIPSLAY_GLUE_POINTS[] =
    3166             : {
    3167             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    3168             : };
    3169             : 
    3170           0 : const CustomShape CS_FLOW_CHART_DIPSLAY(
    3171             :   FLOW_CHART_DIPSLAY_VERTICES, sizeof(FLOW_CHART_DIPSLAY_VERTICES) / sizeof(Vertex),
    3172             :   FLOW_CHART_DIPSLAY_SEGMENTS, sizeof(FLOW_CHART_DIPSLAY_SEGMENTS) / sizeof(unsigned short),
    3173             :   NULL, 0,
    3174             :   NULL, 0,
    3175             :   FLOW_CHART_DIPSLAY_TRS, sizeof(FLOW_CHART_DIPSLAY_TRS) / sizeof(TextRectangle),
    3176             :   21600, 21600,
    3177             :   FLOW_CHART_DIPSLAY_GLUE_POINTS, sizeof(FLOW_CHART_DIPSLAY_GLUE_POINTS) / sizeof(Vertex));
    3178             : 
    3179             : const Vertex FLOW_CHART_DELAY_VERTICES[] =
    3180             : {
    3181             :   {10800, 0}, {21600, 10800}, {10800, 21600}, {0, 21600}, {0, 0}
    3182             : };
    3183             : 
    3184             : const unsigned short FLOW_CHART_DELAY_SEGMENTS[] =
    3185             : {
    3186             :   0x4000, 0xa702, 0x0002, 0x6000, 0x8000
    3187             : };
    3188             : 
    3189             : const TextRectangle FLOW_CHART_DELAY_TRS[] =
    3190             : {
    3191             :   { {0, 3100}, {18500, 18500} }
    3192             : };
    3193             : 
    3194             : const Vertex FLOW_CHART_DELAY_GLUE_POINTS[] =
    3195             : {
    3196             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    3197             : };
    3198             : 
    3199           0 : const CustomShape CS_FLOW_CHART_DELAY(
    3200             :   FLOW_CHART_DELAY_VERTICES, sizeof(FLOW_CHART_DELAY_VERTICES) / sizeof(Vertex),
    3201             :   FLOW_CHART_DELAY_SEGMENTS, sizeof(FLOW_CHART_DELAY_SEGMENTS) / sizeof(unsigned short),
    3202             :   NULL, 0,
    3203             :   NULL, 0,
    3204             :   FLOW_CHART_DELAY_TRS, sizeof(FLOW_CHART_DELAY_TRS) / sizeof(TextRectangle),
    3205             :   21600, 21600,
    3206             :   FLOW_CHART_DELAY_GLUE_POINTS, sizeof(FLOW_CHART_DELAY_GLUE_POINTS) / sizeof(Vertex));
    3207             : 
    3208             : const Vertex TEXT_PLAIN_TEXT_VERTICES[] =
    3209             : {
    3210             :   {CALCULATED_VALUE(3), 0}, {CALCULATED_VALUE(5), 0}, {CALCULATED_VALUE(6), 21600}, {CALCULATED_VALUE(7), 21600}
    3211             : };
    3212             : 
    3213             : const unsigned short TEXT_PLAIN_TEXT_SEGMENTS[] =
    3214             : {
    3215             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    3216             : };
    3217             : 
    3218             : const Calculation TEXT_PLAIN_TEXT_CALC[] =
    3219             : {
    3220             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 10800}, {0x2001, 0x400, 2, 1}, {0x2003, 0x401, 0, 0}, {0xa006, 0x401, 0, 0x402}, {0x8000, 21600, 0, 0x402}, {0x6006, 0x401, 0x404, 21600}, {0x6006, 0x401, 0x402, 0}, {0xa006, 0x401, 21600, 0x404}
    3221             : };
    3222             : 
    3223             : const TextRectangle TEXT_PLAIN_TEXT_TRS[] =
    3224             : {
    3225             :   { {0, 0}, {21600, 21600} }
    3226             : };
    3227             : 
    3228             : const int TEXT_PLAIN_TEXT_DEFAULT_ADJUST[] =
    3229             : {
    3230             :   10800
    3231             : };
    3232             : 
    3233           0 : const CustomShape CS_TEXT_PLAIN_TEXT(
    3234             :   TEXT_PLAIN_TEXT_VERTICES, sizeof(TEXT_PLAIN_TEXT_VERTICES) / sizeof(Vertex),
    3235             :   TEXT_PLAIN_TEXT_SEGMENTS, sizeof(TEXT_PLAIN_TEXT_SEGMENTS) / sizeof(unsigned short),
    3236             :   TEXT_PLAIN_TEXT_CALC, sizeof(TEXT_PLAIN_TEXT_CALC) / sizeof(Calculation),
    3237             :   TEXT_PLAIN_TEXT_DEFAULT_ADJUST, sizeof(TEXT_PLAIN_TEXT_DEFAULT_ADJUST) / sizeof(int),
    3238             :   TEXT_PLAIN_TEXT_TRS, sizeof(TEXT_PLAIN_TEXT_TRS) / sizeof(TextRectangle),
    3239             :   21600, 21600,
    3240             :   NULL, 0);
    3241             : 
    3242             : const Vertex TEXT_STOP_VERTICES[] =
    3243             : {
    3244             :   {0, CALCULATED_VALUE(0)}, {7200, 0}, {14400, 0}, {21600, CALCULATED_VALUE(0)}, {0, CALCULATED_VALUE(1)}, {7200, 21600}, {14400, 21600}, {21600, CALCULATED_VALUE(1)}
    3245             : };
    3246             : 
    3247             : const unsigned short TEXT_STOP_SEGMENTS[] =
    3248             : {
    3249             :   0x4000, 0x0003, 0x8000, 0x4000, 0x0003, 0x8000
    3250             : };
    3251             : 
    3252             : const Calculation TEXT_STOP_CALC[] =
    3253             : {
    3254             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    3255             : };
    3256             : 
    3257             : const TextRectangle TEXT_STOP_TRS[] =
    3258             : {
    3259             :   { {0, 0}, {21600, 21600} }
    3260             : };
    3261             : 
    3262             : const int TEXT_STOP_DEFAULT_ADJUST[] =
    3263             : {
    3264             :   2700
    3265             : };
    3266             : 
    3267           0 : const CustomShape CS_TEXT_STOP(
    3268             :   TEXT_STOP_VERTICES, sizeof(TEXT_STOP_VERTICES) / sizeof(Vertex),
    3269             :   TEXT_STOP_SEGMENTS, sizeof(TEXT_STOP_SEGMENTS) / sizeof(unsigned short),
    3270             :   TEXT_STOP_CALC, sizeof(TEXT_STOP_CALC) / sizeof(Calculation),
    3271             :   TEXT_STOP_DEFAULT_ADJUST, sizeof(TEXT_STOP_DEFAULT_ADJUST) / sizeof(int),
    3272             :   TEXT_STOP_TRS, sizeof(TEXT_STOP_TRS) / sizeof(TextRectangle),
    3273             :   21600, 21600,
    3274             :   NULL, 0);
    3275             : 
    3276             : const Vertex TEXT_TRIANGLE_VERTICES[] =
    3277             : {
    3278             :   {0, CALCULATED_VALUE(0)}, {10800, 0}, {21600, CALCULATED_VALUE(0)}, {0, 21600}, {21600, 21600}
    3279             : };
    3280             : 
    3281             : const unsigned short TEXT_TRIANGLE_SEGMENTS[] =
    3282             : {
    3283             :   0x4000, 0x0002, 0x8000, 0x4000, 0x0001, 0x8000
    3284             : };
    3285             : 
    3286             : const Calculation TEXT_TRIANGLE_CALC[] =
    3287             : {
    3288             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}
    3289             : };
    3290             : 
    3291             : const TextRectangle TEXT_TRIANGLE_TRS[] =
    3292             : {
    3293             :   { {0, 0}, {21600, 21600} }
    3294             : };
    3295             : 
    3296             : const int TEXT_TRIANGLE_DEFAULT_ADJUST[] =
    3297             : {
    3298             :   10800
    3299             : };
    3300             : 
    3301           0 : const CustomShape CS_TEXT_TRIANGLE(
    3302             :   TEXT_TRIANGLE_VERTICES, sizeof(TEXT_TRIANGLE_VERTICES) / sizeof(Vertex),
    3303             :   TEXT_TRIANGLE_SEGMENTS, sizeof(TEXT_TRIANGLE_SEGMENTS) / sizeof(unsigned short),
    3304             :   TEXT_TRIANGLE_CALC, sizeof(TEXT_TRIANGLE_CALC) / sizeof(Calculation),
    3305             :   TEXT_TRIANGLE_DEFAULT_ADJUST, sizeof(TEXT_TRIANGLE_DEFAULT_ADJUST) / sizeof(int),
    3306             :   TEXT_TRIANGLE_TRS, sizeof(TEXT_TRIANGLE_TRS) / sizeof(TextRectangle),
    3307             :   21600, 21600,
    3308             :   NULL, 0);
    3309             : 
    3310             : const Vertex TEXT_TRIANGLE_INVERTED_VERTICES[] =
    3311             : {
    3312             :   {0, 0}, {21600, 0}, {0, CALCULATED_VALUE(0)}, {10800, 21600}, {21600, CALCULATED_VALUE(0)}
    3313             : };
    3314             : 
    3315             : const unsigned short TEXT_TRIANGLE_INVERTED_SEGMENTS[] =
    3316             : {
    3317             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0002, 0x8000
    3318             : };
    3319             : 
    3320             : const Calculation TEXT_TRIANGLE_INVERTED_CALC[] =
    3321             : {
    3322             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}
    3323             : };
    3324             : 
    3325             : const TextRectangle TEXT_TRIANGLE_INVERTED_TRS[] =
    3326             : {
    3327             :   { {0, 0}, {21600, 21600} }
    3328             : };
    3329             : 
    3330             : const int TEXT_TRIANGLE_INVERTED_DEFAULT_ADJUST[] =
    3331             : {
    3332             :   10800
    3333             : };
    3334             : 
    3335           0 : const CustomShape CS_TEXT_TRIANGLE_INVERTED(
    3336             :   TEXT_TRIANGLE_INVERTED_VERTICES, sizeof(TEXT_TRIANGLE_INVERTED_VERTICES) / sizeof(Vertex),
    3337             :   TEXT_TRIANGLE_INVERTED_SEGMENTS, sizeof(TEXT_TRIANGLE_INVERTED_SEGMENTS) / sizeof(unsigned short),
    3338             :   TEXT_TRIANGLE_INVERTED_CALC, sizeof(TEXT_TRIANGLE_INVERTED_CALC) / sizeof(Calculation),
    3339             :   TEXT_TRIANGLE_INVERTED_DEFAULT_ADJUST, sizeof(TEXT_TRIANGLE_INVERTED_DEFAULT_ADJUST) / sizeof(int),
    3340             :   TEXT_TRIANGLE_INVERTED_TRS, sizeof(TEXT_TRIANGLE_INVERTED_TRS) / sizeof(TextRectangle),
    3341             :   21600, 21600,
    3342             :   NULL, 0);
    3343             : 
    3344             : const Vertex FLOW_CHART_DISPLAY_VERTICES[] =
    3345             : {
    3346             :   {3600, 0}, {17800, 0}, {21600, 10800}, {17800, 21600}, {3600, 21600}, {0, 10800}
    3347             : };
    3348             : 
    3349             : const unsigned short FLOW_CHART_DISPLAY_SEGMENTS[] =
    3350             : {
    3351             :   0x4000, 0x0001, 0xa702, 0x0002, 0x6000, 0x8000
    3352             : };
    3353             : 
    3354             : const TextRectangle FLOW_CHART_DISPLAY_TRS[] =
    3355             : {
    3356             :   { {3600, 0}, {17800, 21600} }
    3357             : };
    3358             : 
    3359             : const Vertex FLOW_CHART_DISPLAY_GLUE_POINTS[] =
    3360             : {
    3361             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    3362             : };
    3363             : 
    3364           0 : const CustomShape CS_FLOW_CHART_DISPLAY(
    3365             :   FLOW_CHART_DISPLAY_VERTICES, sizeof(FLOW_CHART_DISPLAY_VERTICES) / sizeof(Vertex),
    3366             :   FLOW_CHART_DISPLAY_SEGMENTS, sizeof(FLOW_CHART_DISPLAY_SEGMENTS) / sizeof(unsigned short),
    3367             :   NULL, 0,
    3368             :   NULL, 0,
    3369             :   FLOW_CHART_DISPLAY_TRS, sizeof(FLOW_CHART_DISPLAY_TRS) / sizeof(TextRectangle),
    3370             :   21600, 21600,
    3371             :   FLOW_CHART_DISPLAY_GLUE_POINTS, sizeof(FLOW_CHART_DISPLAY_GLUE_POINTS) / sizeof(Vertex));
    3372             : 
    3373             : const Vertex TEXT_CHEVRON_VERTICES[] =
    3374             : {
    3375             :   {0, CALCULATED_VALUE(0)}, {10800, 0}, {21600, CALCULATED_VALUE(0)}, {0, 21600}, {10800, CALCULATED_VALUE(1)}, {21600, 21600}
    3376             : };
    3377             : 
    3378             : const unsigned short TEXT_CHEVRON_SEGMENTS[] =
    3379             : {
    3380             :   0x4000, 0x0002, 0x8000, 0x4000, 0x0002, 0x8000
    3381             : };
    3382             : 
    3383             : const Calculation TEXT_CHEVRON_CALC[] =
    3384             : {
    3385             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    3386             : };
    3387             : 
    3388             : const TextRectangle TEXT_CHEVRON_TRS[] =
    3389             : {
    3390             :   { {0, 0}, {21600, 21600} }
    3391             : };
    3392             : 
    3393             : const int TEXT_CHEVRON_DEFAULT_ADJUST[] =
    3394             : {
    3395             :   5400
    3396             : };
    3397             : 
    3398           0 : const CustomShape CS_TEXT_CHEVRON(
    3399             :   TEXT_CHEVRON_VERTICES, sizeof(TEXT_CHEVRON_VERTICES) / sizeof(Vertex),
    3400             :   TEXT_CHEVRON_SEGMENTS, sizeof(TEXT_CHEVRON_SEGMENTS) / sizeof(unsigned short),
    3401             :   TEXT_CHEVRON_CALC, sizeof(TEXT_CHEVRON_CALC) / sizeof(Calculation),
    3402             :   TEXT_CHEVRON_DEFAULT_ADJUST, sizeof(TEXT_CHEVRON_DEFAULT_ADJUST) / sizeof(int),
    3403             :   TEXT_CHEVRON_TRS, sizeof(TEXT_CHEVRON_TRS) / sizeof(TextRectangle),
    3404             :   21600, 21600,
    3405             :   NULL, 0);
    3406             : 
    3407             : const Vertex TEXT_CHEVRON_INVERTED_VERTICES[] =
    3408             : {
    3409             :   {0, 0}, {10800, CALCULATED_VALUE(1)}, {21600, 0}, {0, CALCULATED_VALUE(0)}, {10800, 21600}, {21600, CALCULATED_VALUE(0)}
    3410             : };
    3411             : 
    3412             : const unsigned short TEXT_CHEVRON_INVERTED_SEGMENTS[] =
    3413             : {
    3414             :   0x4000, 0x0002, 0x8000, 0x4000, 0x0002, 0x8000
    3415             : };
    3416             : 
    3417             : const Calculation TEXT_CHEVRON_INVERTED_CALC[] =
    3418             : {
    3419             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    3420             : };
    3421             : 
    3422             : const TextRectangle TEXT_CHEVRON_INVERTED_TRS[] =
    3423             : {
    3424             :   { {0, 0}, {21600, 21600} }
    3425             : };
    3426             : 
    3427             : const int TEXT_CHEVRON_INVERTED_DEFAULT_ADJUST[] =
    3428             : {
    3429             :   16200
    3430             : };
    3431             : 
    3432             : const Vertex TEXT_CHEVRON_INVERTED_GLUE_POINTS[] =
    3433             : {
    3434             :   {0, 0}, {21600, 21600}
    3435             : };
    3436             : 
    3437           0 : const CustomShape CS_TEXT_CHEVRON_INVERTED(
    3438             :   TEXT_CHEVRON_INVERTED_VERTICES, sizeof(TEXT_CHEVRON_INVERTED_VERTICES) / sizeof(Vertex),
    3439             :   TEXT_CHEVRON_INVERTED_SEGMENTS, sizeof(TEXT_CHEVRON_INVERTED_SEGMENTS) / sizeof(unsigned short),
    3440             :   TEXT_CHEVRON_INVERTED_CALC, sizeof(TEXT_CHEVRON_INVERTED_CALC) / sizeof(Calculation),
    3441             :   TEXT_CHEVRON_INVERTED_DEFAULT_ADJUST, sizeof(TEXT_CHEVRON_INVERTED_DEFAULT_ADJUST) / sizeof(int),
    3442             :   TEXT_CHEVRON_INVERTED_TRS, sizeof(TEXT_CHEVRON_INVERTED_TRS) / sizeof(TextRectangle),
    3443             :   21600, 21600,
    3444             :   TEXT_CHEVRON_INVERTED_GLUE_POINTS, sizeof(TEXT_CHEVRON_INVERTED_GLUE_POINTS) / sizeof(Vertex));
    3445             : 
    3446             : const Vertex TEXT_RING_OUTSIDE_VERTICES[] =
    3447             : {
    3448             :   {10800, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {180, 359}, {10800, CALCULATED_VALUE(1)}, {10800, CALCULATED_VALUE(0)}, {180, 359}
    3449             : };
    3450             : 
    3451             : const unsigned short TEXT_RING_OUTSIDE_SEGMENTS[] =
    3452             : {
    3453             :   0xA203, 0x8000, 0xA203, 0x8000
    3454             : };
    3455             : 
    3456             : const Calculation TEXT_RING_OUTSIDE_CALC[] =
    3457             : {
    3458             :   {0x2001, PROP_ADJUST_VAL_FIRST, 1, 2}, {0x8000, 21600, 0, 0x400}
    3459             : };
    3460             : 
    3461             : const TextRectangle TEXT_RING_OUTSIDE_TRS[] =
    3462             : {
    3463             :   { {0, 0}, {21600, 21600} }
    3464             : };
    3465             : 
    3466             : const int TEXT_RING_OUTSIDE_DEFAULT_ADJUST[] =
    3467             : {
    3468             :   16200
    3469             : };
    3470             : 
    3471           0 : const CustomShape CS_TEXT_RING_OUTSIDE(
    3472             :   TEXT_RING_OUTSIDE_VERTICES, sizeof(TEXT_RING_OUTSIDE_VERTICES) / sizeof(Vertex),
    3473             :   TEXT_RING_OUTSIDE_SEGMENTS, sizeof(TEXT_RING_OUTSIDE_SEGMENTS) / sizeof(unsigned short),
    3474             :   TEXT_RING_OUTSIDE_CALC, sizeof(TEXT_RING_OUTSIDE_CALC) / sizeof(Calculation),
    3475             :   TEXT_RING_OUTSIDE_DEFAULT_ADJUST, sizeof(TEXT_RING_OUTSIDE_DEFAULT_ADJUST) / sizeof(int),
    3476             :   TEXT_RING_OUTSIDE_TRS, sizeof(TEXT_RING_OUTSIDE_TRS) / sizeof(TextRectangle),
    3477             :   21600, 21600,
    3478             :   NULL, 0);
    3479             : 
    3480             : const Vertex TEXT_ARCH_UP_CURVE_VERTICES[] =
    3481             : {
    3482             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}
    3483             : };
    3484             : 
    3485             : const unsigned short TEXT_ARCH_UP_CURVE_SEGMENTS[] =
    3486             : {
    3487             :   0xA504, 0x8000
    3488             : };
    3489             : 
    3490             : const Calculation TEXT_ARCH_UP_CURVE_CALC[] =
    3491             : {
    3492             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}
    3493             : };
    3494             : 
    3495             : const TextRectangle TEXT_ARCH_UP_CURVE_TRS[] =
    3496             : {
    3497             :   { {0, 0}, {21600, 21600} }
    3498             : };
    3499             : 
    3500             : const int TEXT_ARCH_UP_CURVE_DEFAULT_ADJUST[] =
    3501             : {
    3502             :   180
    3503             : };
    3504             : 
    3505           0 : const CustomShape CS_TEXT_ARCH_UP_CURVE(
    3506             :   TEXT_ARCH_UP_CURVE_VERTICES, sizeof(TEXT_ARCH_UP_CURVE_VERTICES) / sizeof(Vertex),
    3507             :   TEXT_ARCH_UP_CURVE_SEGMENTS, sizeof(TEXT_ARCH_UP_CURVE_SEGMENTS) / sizeof(unsigned short),
    3508             :   TEXT_ARCH_UP_CURVE_CALC, sizeof(TEXT_ARCH_UP_CURVE_CALC) / sizeof(Calculation),
    3509             :   TEXT_ARCH_UP_CURVE_DEFAULT_ADJUST, sizeof(TEXT_ARCH_UP_CURVE_DEFAULT_ADJUST) / sizeof(int),
    3510             :   TEXT_ARCH_UP_CURVE_TRS, sizeof(TEXT_ARCH_UP_CURVE_TRS) / sizeof(TextRectangle),
    3511             :   21600, 21600,
    3512             :   NULL, 0);
    3513             : 
    3514             : const Vertex TEXT_ARCH_UP_POUR_VERTICES[] =
    3515             : {
    3516             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(9)}
    3517             : };
    3518             : 
    3519             : const unsigned short TEXT_ARCH_UP_POUR_SEGMENTS[] =
    3520             : {
    3521             :   0xA504, 0x8000, 0xA504, 0x8000
    3522             : };
    3523             : 
    3524             : const Calculation TEXT_ARCH_UP_POUR_CALC[] =
    3525             : {
    3526             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x600a, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x6009, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x406, 10800, 0}, {0x2000, 0x407, 10800, 0}, {0x8000, 21600, 0, 0x408}, {0x8000, 21600, 0, 0x405}
    3527             : };
    3528             : 
    3529             : const TextRectangle TEXT_ARCH_UP_POUR_TRS[] =
    3530             : {
    3531             :   { {0, 0}, {21600, 21600} }
    3532             : };
    3533             : 
    3534             : const int TEXT_ARCH_UP_POUR_DEFAULT_ADJUST[] =
    3535             : {
    3536             :   180, 5400
    3537             : };
    3538             : 
    3539           0 : const CustomShape CS_TEXT_ARCH_UP_POUR(
    3540             :   TEXT_ARCH_UP_POUR_VERTICES, sizeof(TEXT_ARCH_UP_POUR_VERTICES) / sizeof(Vertex),
    3541             :   TEXT_ARCH_UP_POUR_SEGMENTS, sizeof(TEXT_ARCH_UP_POUR_SEGMENTS) / sizeof(unsigned short),
    3542             :   TEXT_ARCH_UP_POUR_CALC, sizeof(TEXT_ARCH_UP_POUR_CALC) / sizeof(Calculation),
    3543             :   TEXT_ARCH_UP_POUR_DEFAULT_ADJUST, sizeof(TEXT_ARCH_UP_POUR_DEFAULT_ADJUST) / sizeof(int),
    3544             :   TEXT_ARCH_UP_POUR_TRS, sizeof(TEXT_ARCH_UP_POUR_TRS) / sizeof(TextRectangle),
    3545             :   21600, 21600,
    3546             :   NULL, 0);
    3547             : 
    3548             : const Vertex TEXT_ARCH_DOWN_CURVE_VERTICES[] =
    3549             : {
    3550             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}
    3551             : };
    3552             : 
    3553             : const unsigned short TEXT_ARCH_DOWN_CURVE_SEGMENTS[] =
    3554             : {
    3555             :   0xA304, 0x8000
    3556             : };
    3557             : 
    3558             : const Calculation TEXT_ARCH_DOWN_CURVE_CALC[] =
    3559             : {
    3560             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}
    3561             : };
    3562             : 
    3563             : const TextRectangle TEXT_ARCH_DOWN_CURVE_TRS[] =
    3564             : {
    3565             :   { {0, 0}, {21600, 21600} }
    3566             : };
    3567             : 
    3568             : const int TEXT_ARCH_DOWN_CURVE_DEFAULT_ADJUST[] =
    3569             : {
    3570             :   0
    3571             : };
    3572             : 
    3573           0 : const CustomShape CS_TEXT_ARCH_DOWN_CURVE(
    3574             :   TEXT_ARCH_DOWN_CURVE_VERTICES, sizeof(TEXT_ARCH_DOWN_CURVE_VERTICES) / sizeof(Vertex),
    3575             :   TEXT_ARCH_DOWN_CURVE_SEGMENTS, sizeof(TEXT_ARCH_DOWN_CURVE_SEGMENTS) / sizeof(unsigned short),
    3576             :   TEXT_ARCH_DOWN_CURVE_CALC, sizeof(TEXT_ARCH_DOWN_CURVE_CALC) / sizeof(Calculation),
    3577             :   TEXT_ARCH_DOWN_CURVE_DEFAULT_ADJUST, sizeof(TEXT_ARCH_DOWN_CURVE_DEFAULT_ADJUST) / sizeof(int),
    3578             :   TEXT_ARCH_DOWN_CURVE_TRS, sizeof(TEXT_ARCH_DOWN_CURVE_TRS) / sizeof(TextRectangle),
    3579             :   21600, 21600,
    3580             :   NULL, 0);
    3581             : 
    3582             : const Vertex TEXT_CIRCLE_CURVE_VERTICES[] =
    3583             : {
    3584             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(4)}
    3585             : };
    3586             : 
    3587             : const unsigned short TEXT_CIRCLE_CURVE_SEGMENTS[] =
    3588             : {
    3589             :   0xA504, 0x8000
    3590             : };
    3591             : 
    3592             : const Calculation TEXT_CIRCLE_CURVE_CALC[] =
    3593             : {
    3594             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x403}
    3595             : };
    3596             : 
    3597             : const TextRectangle TEXT_CIRCLE_CURVE_TRS[] =
    3598             : {
    3599             :   { {0, 0}, {21600, 21600} }
    3600             : };
    3601             : 
    3602             : const int TEXT_CIRCLE_CURVE_DEFAULT_ADJUST[] =
    3603             : {
    3604             :   -179
    3605             : };
    3606             : 
    3607           0 : const CustomShape CS_TEXT_CIRCLE_CURVE(
    3608             :   TEXT_CIRCLE_CURVE_VERTICES, sizeof(TEXT_CIRCLE_CURVE_VERTICES) / sizeof(Vertex),
    3609             :   TEXT_CIRCLE_CURVE_SEGMENTS, sizeof(TEXT_CIRCLE_CURVE_SEGMENTS) / sizeof(unsigned short),
    3610             :   TEXT_CIRCLE_CURVE_CALC, sizeof(TEXT_CIRCLE_CURVE_CALC) / sizeof(Calculation),
    3611             :   TEXT_CIRCLE_CURVE_DEFAULT_ADJUST, sizeof(TEXT_CIRCLE_CURVE_DEFAULT_ADJUST) / sizeof(int),
    3612             :   TEXT_CIRCLE_CURVE_TRS, sizeof(TEXT_CIRCLE_CURVE_TRS) / sizeof(TextRectangle),
    3613             :   21600, 21600,
    3614             :   NULL, 0);
    3615             : 
    3616             : const Vertex TEXT_BUTTON_CURVE_VERTICES[] =
    3617             : {
    3618             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {0, 10800}, {21600, 10800}, {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(5)}
    3619             : };
    3620             : 
    3621             : const unsigned short TEXT_BUTTON_CURVE_SEGMENTS[] =
    3622             : {
    3623             :   0xA504, 0x8000, 0x4000, 0x0001, 0x8000, 0xA304, 0x8000
    3624             : };
    3625             : 
    3626             : const Calculation TEXT_BUTTON_CURVE_CALC[] =
    3627             : {
    3628             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}, {0x8000, 21600, 0, 0x403}
    3629             : };
    3630             : 
    3631             : const TextRectangle TEXT_BUTTON_CURVE_TRS[] =
    3632             : {
    3633             :   { {0, 0}, {21600, 21600} }
    3634             : };
    3635             : 
    3636             : const int TEXT_BUTTON_CURVE_DEFAULT_ADJUST[] =
    3637             : {
    3638             :   180
    3639             : };
    3640             : 
    3641           0 : const CustomShape CS_TEXT_BUTTON_CURVE(
    3642             :   TEXT_BUTTON_CURVE_VERTICES, sizeof(TEXT_BUTTON_CURVE_VERTICES) / sizeof(Vertex),
    3643             :   TEXT_BUTTON_CURVE_SEGMENTS, sizeof(TEXT_BUTTON_CURVE_SEGMENTS) / sizeof(unsigned short),
    3644             :   TEXT_BUTTON_CURVE_CALC, sizeof(TEXT_BUTTON_CURVE_CALC) / sizeof(Calculation),
    3645             :   TEXT_BUTTON_CURVE_DEFAULT_ADJUST, sizeof(TEXT_BUTTON_CURVE_DEFAULT_ADJUST) / sizeof(int),
    3646             :   TEXT_BUTTON_CURVE_TRS, sizeof(TEXT_BUTTON_CURVE_TRS) / sizeof(TextRectangle),
    3647             :   21600, 21600,
    3648             :   NULL, 0);
    3649             : 
    3650             : const Vertex TEXT_ARCH_DOWN_POUR_VERTICES[] =
    3651             : {
    3652             :   {CALCULATED_VALUE(5), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {0, 0}, {21600, 21600}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}
    3653             : };
    3654             : 
    3655             : const unsigned short TEXT_ARCH_DOWN_POUR_SEGMENTS[] =
    3656             : {
    3657             :   0xA304, 0x8000, 0xA304, 0x8000
    3658             : };
    3659             : 
    3660             : const Calculation TEXT_ARCH_DOWN_POUR_CALC[] =
    3661             : {
    3662             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x600a, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x6009, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x406, 10800, 0}, {0x2000, 0x407, 10800, 0}, {0x8000, 21600, 0, 0x408}, {0x8000, 21600, 0, 0x405}
    3663             : };
    3664             : 
    3665             : const TextRectangle TEXT_ARCH_DOWN_POUR_TRS[] =
    3666             : {
    3667             :   { {0, 0}, {21600, 21600} }
    3668             : };
    3669             : 
    3670             : const int TEXT_ARCH_DOWN_POUR_DEFAULT_ADJUST[] =
    3671             : {
    3672             :   0, 5400
    3673             : };
    3674             : 
    3675           0 : const CustomShape CS_TEXT_ARCH_DOWN_POUR(
    3676             :   TEXT_ARCH_DOWN_POUR_VERTICES, sizeof(TEXT_ARCH_DOWN_POUR_VERTICES) / sizeof(Vertex),
    3677             :   TEXT_ARCH_DOWN_POUR_SEGMENTS, sizeof(TEXT_ARCH_DOWN_POUR_SEGMENTS) / sizeof(unsigned short),
    3678             :   TEXT_ARCH_DOWN_POUR_CALC, sizeof(TEXT_ARCH_DOWN_POUR_CALC) / sizeof(Calculation),
    3679             :   TEXT_ARCH_DOWN_POUR_DEFAULT_ADJUST, sizeof(TEXT_ARCH_DOWN_POUR_DEFAULT_ADJUST) / sizeof(int),
    3680             :   TEXT_ARCH_DOWN_POUR_TRS, sizeof(TEXT_ARCH_DOWN_POUR_TRS) / sizeof(TextRectangle),
    3681             :   21600, 21600,
    3682             :   NULL, 0);
    3683             : 
    3684             : const Vertex TEXT_CIRCLE_POUR_VERTICES[] =
    3685             : {
    3686             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(8), CALCULATED_VALUE(0xa)}
    3687             : };
    3688             : 
    3689             : const unsigned short TEXT_CIRCLE_POUR_SEGMENTS[] =
    3690             : {
    3691             :   0xA504, 0x8000, 0xA504, 0x8000
    3692             : };
    3693             : 
    3694             : const Calculation TEXT_CIRCLE_POUR_CALC[] =
    3695             : {
    3696             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x403}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x600a, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x6009, 0x405, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x406, 10800, 0}, {0x2000, 0x407, 10800, 0}, {0x8000, 21600, 0, 0x409}, {0x8000, 21600, 0, 0x405}, {0x000, 21600, 0, 0}
    3697             : };
    3698             : 
    3699             : const TextRectangle TEXT_CIRCLE_POUR_TRS[] =
    3700             : {
    3701             :   { {0, 0}, {21600, 21600} }
    3702             : };
    3703             : 
    3704             : const int TEXT_CIRCLE_POUR_DEFAULT_ADJUST[] =
    3705             : {
    3706             :   -179, 5400
    3707             : };
    3708             : 
    3709           0 : const CustomShape CS_TEXT_CIRCLE_POUR(
    3710             :   TEXT_CIRCLE_POUR_VERTICES, sizeof(TEXT_CIRCLE_POUR_VERTICES) / sizeof(Vertex),
    3711             :   TEXT_CIRCLE_POUR_SEGMENTS, sizeof(TEXT_CIRCLE_POUR_SEGMENTS) / sizeof(unsigned short),
    3712             :   TEXT_CIRCLE_POUR_CALC, sizeof(TEXT_CIRCLE_POUR_CALC) / sizeof(Calculation),
    3713             :   TEXT_CIRCLE_POUR_DEFAULT_ADJUST, sizeof(TEXT_CIRCLE_POUR_DEFAULT_ADJUST) / sizeof(int),
    3714             :   TEXT_CIRCLE_POUR_TRS, sizeof(TEXT_CIRCLE_POUR_TRS) / sizeof(TextRectangle),
    3715             :   21600, 21600,
    3716             :   NULL, 0);
    3717             : 
    3718             : const Vertex TEXT_BUTTON_POUR_VERTICES[] =
    3719             : {
    3720             :   {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(11)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(0x15), CALCULATED_VALUE(16)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(15)}, {CALCULATED_VALUE(0x15), CALCULATED_VALUE(15)}, {CALCULATED_VALUE(6), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(13)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(13)}, {0, 0}, {21600, 21600}, {CALCULATED_VALUE(2), CALCULATED_VALUE(5)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(5)}
    3721             : };
    3722             : 
    3723             : const unsigned short TEXT_BUTTON_POUR_SEGMENTS[] =
    3724             : {
    3725             :   0xA504, 0x8000, 0xA504, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000, 0xA304, 0x8000, 0xA304, 0x8000
    3726             : };
    3727             : 
    3728             : const Calculation TEXT_BUTTON_POUR_CALC[] =
    3729             : {
    3730             :   {0x400a, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x4009, 10800, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x400, 10800, 0}, {0x2000, 0x401, 10800, 0}, {0x8000, 21600, 0, 0x402}, {0x8000, 21600, 0, 0x403}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x406}, {0x600a, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST, 0}, {0x6009, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST, 0}, {0x2000, 0x408, 10800, 0}, {0x2000, 0x409, 10800, 0}, {0x8000, 21600, 0, 0x40a}, {0x8000, 21600, 0, 0x40b}, {0x2001, 0x406, 1, 2}, {0x4000, 10800, 0x40e, 0}, {0x8000, 10800, 0, 0x40e}, {0x6001, 0x40e, 0x40e, 1}, {0x6001, PROP_ADJUST_VAL_FIRST + 1, PROP_ADJUST_VAL_FIRST + 1, 1}, {0xA000, 0x412, 0, 0x411}, {0x200d, 0x413, 0, 0}, {0x4000, 10800, 0x414, 0}, {0x8000, 10800, 0, 0x414}
    3731             : };
    3732             : 
    3733             : const TextRectangle TEXT_BUTTON_POUR_TRS[] =
    3734             : {
    3735             :   { {0, 0}, {21600, 21600} }
    3736             : };
    3737             : 
    3738             : const int TEXT_BUTTON_POUR_DEFAULT_ADJUST[] =
    3739             : {
    3740             :   180, 5400
    3741             : };
    3742             : 
    3743           0 : const CustomShape CS_TEXT_BUTTON_POUR(
    3744             :   TEXT_BUTTON_POUR_VERTICES, sizeof(TEXT_BUTTON_POUR_VERTICES) / sizeof(Vertex),
    3745             :   TEXT_BUTTON_POUR_SEGMENTS, sizeof(TEXT_BUTTON_POUR_SEGMENTS) / sizeof(unsigned short),
    3746             :   TEXT_BUTTON_POUR_CALC, sizeof(TEXT_BUTTON_POUR_CALC) / sizeof(Calculation),
    3747             :   TEXT_BUTTON_POUR_DEFAULT_ADJUST, sizeof(TEXT_BUTTON_POUR_DEFAULT_ADJUST) / sizeof(int),
    3748             :   TEXT_BUTTON_POUR_TRS, sizeof(TEXT_BUTTON_POUR_TRS) / sizeof(TextRectangle),
    3749             :   21600, 21600,
    3750             :   NULL, 0);
    3751             : 
    3752             : const Vertex TEXT_CURVE_UP_VERTICES[] =
    3753             : {
    3754             :   {0, CALCULATED_VALUE(0)}, {4900, CALCULATED_VALUE(1) /*12170->0 14250 ->0*/}, {11640, CALCULATED_VALUE(2) /*12170->0 12800 ->0*/}, {21600, 0}, {0, CALCULATED_VALUE(4) /*12170->0 17220 ->21600*/}, {3700, 21600}, {8500, 21600}, {10100, 21600}, {14110, 21600}, {15910, 21600}, {21600, CALCULATED_VALUE(4) /*12170->0 17220 ->21600*/}
    3755             : };
    3756             : 
    3757             : const unsigned short TEXT_CURVE_UP_SEGMENTS[] =
    3758             : {
    3759             :   0x4000, 0x2001, 0x8000, 0x4000, 0x2002, 0x8000
    3760             : };
    3761             : 
    3762             : const Calculation TEXT_CURVE_UP_CALC[] =
    3763             : {
    3764             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x4001, 14250, 0x400, 12170}, {0x4001, 12800, 0x400, 12170}, {0x4001, 6380, 0x400, 12170}, {0x8000, 21600, 0, 0x403}
    3765             : };
    3766             : 
    3767             : const TextRectangle TEXT_CURVE_UP_TRS[] =
    3768             : {
    3769             :   { {0, 0}, {21600, 21600} }
    3770             : };
    3771             : 
    3772             : const int TEXT_CURVE_UP_DEFAULT_ADJUST[] =
    3773             : {
    3774             :   9900
    3775             : };
    3776             : 
    3777           0 : const CustomShape CS_TEXT_CURVE_UP(
    3778             :   TEXT_CURVE_UP_VERTICES, sizeof(TEXT_CURVE_UP_VERTICES) / sizeof(Vertex),
    3779             :   TEXT_CURVE_UP_SEGMENTS, sizeof(TEXT_CURVE_UP_SEGMENTS) / sizeof(unsigned short),
    3780             :   TEXT_CURVE_UP_CALC, sizeof(TEXT_CURVE_UP_CALC) / sizeof(Calculation),
    3781             :   TEXT_CURVE_UP_DEFAULT_ADJUST, sizeof(TEXT_CURVE_UP_DEFAULT_ADJUST) / sizeof(int),
    3782             :   TEXT_CURVE_UP_TRS, sizeof(TEXT_CURVE_UP_TRS) / sizeof(TextRectangle),
    3783             :   21600, 21600,
    3784             :   NULL, 0);
    3785             : 
    3786             : const Vertex TEXT_CURVE_DOWN_VERTICES[] =
    3787             : {
    3788             :   {0, 0}, {9960, CALCULATED_VALUE(2)}, {16700, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(0)}, {0, CALCULATED_VALUE(4)}, {5690, 21600}, {7490, 21600}, {11500, 21600}, {13100, 21600}, {17900, 21600}, {21600, CALCULATED_VALUE(4)}
    3789             : };
    3790             : 
    3791             : const unsigned short TEXT_CURVE_DOWN_SEGMENTS[] =
    3792             : {
    3793             :   0x4000, 0x2001, 0x8000, 0x4000, 0x2002, 0x8000
    3794             : };
    3795             : 
    3796             : const Calculation TEXT_CURVE_DOWN_CALC[] =
    3797             : {
    3798             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x4001, 14250, 0x400, 12170}, {0x4001, 12800, 0x400, 12170}, {0x4001, 6380, 0x400, 12170}, {0x8000, 21600, 0, 0x403}
    3799             : };
    3800             : 
    3801             : const TextRectangle TEXT_CURVE_DOWN_TRS[] =
    3802             : {
    3803             :   { {0, 0}, {21600, 21600} }
    3804             : };
    3805             : 
    3806             : const int TEXT_CURVE_DOWN_DEFAULT_ADJUST[] =
    3807             : {
    3808             :   9900
    3809             : };
    3810             : 
    3811           0 : const CustomShape CS_TEXT_CURVE_DOWN(
    3812             :   TEXT_CURVE_DOWN_VERTICES, sizeof(TEXT_CURVE_DOWN_VERTICES) / sizeof(Vertex),
    3813             :   TEXT_CURVE_DOWN_SEGMENTS, sizeof(TEXT_CURVE_DOWN_SEGMENTS) / sizeof(unsigned short),
    3814             :   TEXT_CURVE_DOWN_CALC, sizeof(TEXT_CURVE_DOWN_CALC) / sizeof(Calculation),
    3815             :   TEXT_CURVE_DOWN_DEFAULT_ADJUST, sizeof(TEXT_CURVE_DOWN_DEFAULT_ADJUST) / sizeof(int),
    3816             :   TEXT_CURVE_DOWN_TRS, sizeof(TEXT_CURVE_DOWN_TRS) / sizeof(TextRectangle),
    3817             :   21600, 21600,
    3818             :   NULL, 0);
    3819             : 
    3820             : const Vertex TEXT_CASCADE_UP_VERTICES[] =
    3821             : {
    3822             :   {0, CALCULATED_VALUE(2)}, {21600, 0}, {0, 21600}, {21600, CALCULATED_VALUE(0)}
    3823             : };
    3824             : 
    3825             : const unsigned short TEXT_CASCADE_UP_SEGMENTS[] =
    3826             : {
    3827             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    3828             : };
    3829             : 
    3830             : const Calculation TEXT_CASCADE_UP_CALC[] =
    3831             : {
    3832             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x401, 1, 4}
    3833             : };
    3834             : 
    3835             : const TextRectangle TEXT_CASCADE_UP_TRS[] =
    3836             : {
    3837             :   { {0, 0}, {21600, 21600} }
    3838             : };
    3839             : 
    3840             : const int TEXT_CASCADE_UP_DEFAULT_ADJUST[] =
    3841             : {
    3842             :   9600
    3843             : };
    3844             : 
    3845           0 : const CustomShape CS_TEXT_CASCADE_UP(
    3846             :   TEXT_CASCADE_UP_VERTICES, sizeof(TEXT_CASCADE_UP_VERTICES) / sizeof(Vertex),
    3847             :   TEXT_CASCADE_UP_SEGMENTS, sizeof(TEXT_CASCADE_UP_SEGMENTS) / sizeof(unsigned short),
    3848             :   TEXT_CASCADE_UP_CALC, sizeof(TEXT_CASCADE_UP_CALC) / sizeof(Calculation),
    3849             :   TEXT_CASCADE_UP_DEFAULT_ADJUST, sizeof(TEXT_CASCADE_UP_DEFAULT_ADJUST) / sizeof(int),
    3850             :   TEXT_CASCADE_UP_TRS, sizeof(TEXT_CASCADE_UP_TRS) / sizeof(TextRectangle),
    3851             :   21600, 21600,
    3852             :   NULL, 0);
    3853             : 
    3854             : const Vertex TEXT_CASCADE_DOWN_VERTICES[] =
    3855             : {
    3856             :   {0, 0}, {21600, CALCULATED_VALUE(2)}, {0, CALCULATED_VALUE(0)}, {21600, 21600}
    3857             : };
    3858             : 
    3859             : const unsigned short TEXT_CASCADE_DOWN_SEGMENTS[] =
    3860             : {
    3861             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    3862             : };
    3863             : 
    3864             : const Calculation TEXT_CASCADE_DOWN_CALC[] =
    3865             : {
    3866             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x401, 1, 4}
    3867             : };
    3868             : 
    3869             : const TextRectangle TEXT_CASCADE_DOWN_TRS[] =
    3870             : {
    3871             :   { {0, 0}, {21600, 21600} }
    3872             : };
    3873             : 
    3874             : const int TEXT_CASCADE_DOWN_DEFAULT_ADJUST[] =
    3875             : {
    3876             :   9600
    3877             : };
    3878             : 
    3879           0 : const CustomShape CS_TEXT_CASCADE_DOWN(
    3880             :   TEXT_CASCADE_DOWN_VERTICES, sizeof(TEXT_CASCADE_DOWN_VERTICES) / sizeof(Vertex),
    3881             :   TEXT_CASCADE_DOWN_SEGMENTS, sizeof(TEXT_CASCADE_DOWN_SEGMENTS) / sizeof(unsigned short),
    3882             :   TEXT_CASCADE_DOWN_CALC, sizeof(TEXT_CASCADE_DOWN_CALC) / sizeof(Calculation),
    3883             :   TEXT_CASCADE_DOWN_DEFAULT_ADJUST, sizeof(TEXT_CASCADE_DOWN_DEFAULT_ADJUST) / sizeof(int),
    3884             :   TEXT_CASCADE_DOWN_TRS, sizeof(TEXT_CASCADE_DOWN_TRS) / sizeof(TextRectangle),
    3885             :   21600, 21600,
    3886             :   NULL, 0);
    3887             : 
    3888             : const Vertex TEXT_WAVE_1_VERTICES[] =
    3889             : {
    3890             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}
    3891             : };
    3892             : 
    3893             : const unsigned short TEXT_WAVE_1_SEGMENTS[] =
    3894             : {
    3895             :   0x4000, 0x2001, 0x8000, 0x4000, 0x2001, 0x8000
    3896             : };
    3897             : 
    3898             : const Calculation TEXT_WAVE_1_CALC[] =
    3899             : {
    3900             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 15800, 0x400, 4460}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 7200, 0x40e}, {0x6000, 0x40c, 0x40e, 7200}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}
    3901             : };
    3902             : 
    3903             : const TextRectangle TEXT_WAVE_1_TRS[] =
    3904             : {
    3905             :   { {0, 0}, {21600, 21600} }
    3906             : };
    3907             : 
    3908             : const int TEXT_WAVE_1_DEFAULT_ADJUST[] =
    3909             : {
    3910             :   1400, 10800
    3911             : };
    3912             : 
    3913           0 : const CustomShape CS_TEXT_WAVE_1(
    3914             :   TEXT_WAVE_1_VERTICES, sizeof(TEXT_WAVE_1_VERTICES) / sizeof(Vertex),
    3915             :   TEXT_WAVE_1_SEGMENTS, sizeof(TEXT_WAVE_1_SEGMENTS) / sizeof(unsigned short),
    3916             :   TEXT_WAVE_1_CALC, sizeof(TEXT_WAVE_1_CALC) / sizeof(Calculation),
    3917             :   TEXT_WAVE_1_DEFAULT_ADJUST, sizeof(TEXT_WAVE_1_DEFAULT_ADJUST) / sizeof(int),
    3918             :   TEXT_WAVE_1_TRS, sizeof(TEXT_WAVE_1_TRS) / sizeof(TextRectangle),
    3919             :   21600, 21600,
    3920             :   NULL, 0);
    3921             : 
    3922             : const Vertex TEXT_WAVE_2_VERTICES[] =
    3923             : {
    3924             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}
    3925             : };
    3926             : 
    3927             : const unsigned short TEXT_WAVE_2_SEGMENTS[] =
    3928             : {
    3929             :   0x4000, 0x2001, 0x8000, 0x4000, 0x2001, 0x8000
    3930             : };
    3931             : 
    3932             : const Calculation TEXT_WAVE_2_CALC[] =
    3933             : {
    3934             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 15800, 0x400, 4460}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 7200, 0x40e}, {0x6000, 0x40c, 0x40e, 7200}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}
    3935             : };
    3936             : 
    3937             : const TextRectangle TEXT_WAVE_2_TRS[] =
    3938             : {
    3939             :   { {0, 0}, {21600, 21600} }
    3940             : };
    3941             : 
    3942             : const int TEXT_WAVE_2_DEFAULT_ADJUST[] =
    3943             : {
    3944             :   1400, 10800
    3945             : };
    3946             : 
    3947           0 : const CustomShape CS_TEXT_WAVE_2(
    3948             :   TEXT_WAVE_2_VERTICES, sizeof(TEXT_WAVE_2_VERTICES) / sizeof(Vertex),
    3949             :   TEXT_WAVE_2_SEGMENTS, sizeof(TEXT_WAVE_2_SEGMENTS) / sizeof(unsigned short),
    3950             :   TEXT_WAVE_2_CALC, sizeof(TEXT_WAVE_2_CALC) / sizeof(Calculation),
    3951             :   TEXT_WAVE_2_DEFAULT_ADJUST, sizeof(TEXT_WAVE_2_DEFAULT_ADJUST) / sizeof(int),
    3952             :   TEXT_WAVE_2_TRS, sizeof(TEXT_WAVE_2_TRS) / sizeof(TextRectangle),
    3953             :   21600, 21600,
    3954             :   NULL, 0);
    3955             : 
    3956             : const Vertex TEXT_WAVE_3_VERTICES[] =
    3957             : {
    3958             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}
    3959             : };
    3960             : 
    3961             : const unsigned short TEXT_WAVE_3_SEGMENTS[] =
    3962             : {
    3963             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    3964             : };
    3965             : 
    3966             : const Calculation TEXT_WAVE_3_CALC[] =
    3967             : {
    3968             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 7900, 0x400, 2230}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 3600, 0x40e}, {0x6000, 0x40c, 0x40e, 3600}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}, {0xa000, 0x412, 0, 0x40e}, {0x6000, 0x412, 0x40e, 0}, {0xa000, 0x413, 0, 0x40e}, {0x6000, 0x413, 0x40e, 0}
    3969             : };
    3970             : 
    3971             : const TextRectangle TEXT_WAVE_3_TRS[] =
    3972             : {
    3973             :   { {0, 0}, {21600, 21600} }
    3974             : };
    3975             : 
    3976             : const int TEXT_WAVE_3_DEFAULT_ADJUST[] =
    3977             : {
    3978             :   1400, 10800
    3979             : };
    3980             : 
    3981           0 : const CustomShape CS_TEXT_WAVE_3(
    3982             :   TEXT_WAVE_3_VERTICES, sizeof(TEXT_WAVE_3_VERTICES) / sizeof(Vertex),
    3983             :   TEXT_WAVE_3_SEGMENTS, sizeof(TEXT_WAVE_3_SEGMENTS) / sizeof(unsigned short),
    3984             :   TEXT_WAVE_3_CALC, sizeof(TEXT_WAVE_3_CALC) / sizeof(Calculation),
    3985             :   TEXT_WAVE_3_DEFAULT_ADJUST, sizeof(TEXT_WAVE_3_DEFAULT_ADJUST) / sizeof(int),
    3986             :   TEXT_WAVE_3_TRS, sizeof(TEXT_WAVE_3_TRS) / sizeof(TextRectangle),
    3987             :   21600, 21600,
    3988             :   NULL, 0);
    3989             : 
    3990             : const Vertex TEXT_WAVE_4_VERTICES[] =
    3991             : {
    3992             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}
    3993             : };
    3994             : 
    3995             : const unsigned short TEXT_WAVE_4_SEGMENTS[] =
    3996             : {
    3997             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    3998             : };
    3999             : 
    4000             : const Calculation TEXT_WAVE_4_CALC[] =
    4001             : {
    4002             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 7900, 0x400, 2230}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 3600, 0x40e}, {0x6000, 0x40c, 0x40e, 3600}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}, {0xa000, 0x412, 0, 0x40e}, {0x6000, 0x412, 0x40e, 0}, {0xa000, 0x413, 0, 0x40e}, {0x6000, 0x413, 0x40e, 0}
    4003             : };
    4004             : 
    4005             : const TextRectangle TEXT_WAVE_4_TRS[] =
    4006             : {
    4007             :   { {CALCULATED_VALUE(5), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(23)} }
    4008             : };
    4009             : 
    4010             : const int TEXT_WAVE_4_DEFAULT_ADJUST[] =
    4011             : {
    4012             :   1400, 10800
    4013             : };
    4014             : 
    4015             : const Vertex TEXT_WAVE_4_GLUE_POINTS[] =
    4016             : {
    4017             :   {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x14), 10800}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x15), 10800}
    4018             : };
    4019             : 
    4020           0 : const CustomShape CS_TEXT_WAVE_4(
    4021             :   TEXT_WAVE_4_VERTICES, sizeof(TEXT_WAVE_4_VERTICES) / sizeof(Vertex),
    4022             :   TEXT_WAVE_4_SEGMENTS, sizeof(TEXT_WAVE_4_SEGMENTS) / sizeof(unsigned short),
    4023             :   TEXT_WAVE_4_CALC, sizeof(TEXT_WAVE_4_CALC) / sizeof(Calculation),
    4024             :   TEXT_WAVE_4_DEFAULT_ADJUST, sizeof(TEXT_WAVE_4_DEFAULT_ADJUST) / sizeof(int),
    4025             :   TEXT_WAVE_4_TRS, sizeof(TEXT_WAVE_4_TRS) / sizeof(TextRectangle),
    4026             :   21600, 21600,
    4027             :   TEXT_WAVE_4_GLUE_POINTS, sizeof(TEXT_WAVE_4_GLUE_POINTS) / sizeof(Vertex));
    4028             : 
    4029             : const Vertex TEXT_INFLATE_VERTICES[] =
    4030             : {
    4031             :   {0, CALCULATED_VALUE(0)}, {4100, CALCULATED_VALUE(1)}, {7300, 0}, {10800, 0}, {14300, 0}, {17500, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(0)}, {0, CALCULATED_VALUE(2)}, {4100, CALCULATED_VALUE(3)}, {7300, 21600}, {10800, 21600}, {14300, 21600}, {17500, CALCULATED_VALUE(3)}, {21600, CALCULATED_VALUE(2)}
    4032             : };
    4033             : 
    4034             : const unsigned short TEXT_INFLATE_SEGMENTS[] =
    4035             : {
    4036             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    4037             : };
    4038             : 
    4039             : const Calculation TEXT_INFLATE_CALC[] =
    4040             : {
    4041             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x4001, 1530, 0x400, 4650}, {0x8000, 21600, 0, 0x400}, {0x8000, 21600, 0, 0x401}
    4042             : };
    4043             : 
    4044             : const TextRectangle TEXT_INFLATE_TRS[] =
    4045             : {
    4046             :   { {0, 0}, {21600, 21600} }
    4047             : };
    4048             : 
    4049             : const int TEXT_INFLATE_DEFAULT_ADJUST[] =
    4050             : {
    4051             :   2950
    4052             : };
    4053             : 
    4054           0 : const CustomShape CS_TEXT_INFLATE(
    4055             :   TEXT_INFLATE_VERTICES, sizeof(TEXT_INFLATE_VERTICES) / sizeof(Vertex),
    4056             :   TEXT_INFLATE_SEGMENTS, sizeof(TEXT_INFLATE_SEGMENTS) / sizeof(unsigned short),
    4057             :   TEXT_INFLATE_CALC, sizeof(TEXT_INFLATE_CALC) / sizeof(Calculation),
    4058             :   TEXT_INFLATE_DEFAULT_ADJUST, sizeof(TEXT_INFLATE_DEFAULT_ADJUST) / sizeof(int),
    4059             :   TEXT_INFLATE_TRS, sizeof(TEXT_INFLATE_TRS) / sizeof(TextRectangle),
    4060             :   21600, 21600,
    4061             :   NULL, 0);
    4062             : 
    4063             : const Vertex TEXT_DEFLATE_VERTICES[] =
    4064             : {
    4065             :   {0, 0}, {3500, CALCULATED_VALUE(1)}, {7100, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {14500, CALCULATED_VALUE(0)}, {18100, CALCULATED_VALUE(1)}, {21600, 0}, {0, 21600}, {3500, CALCULATED_VALUE(3)}, {7100, CALCULATED_VALUE(2)}, {10800, CALCULATED_VALUE(2)}, {14500, CALCULATED_VALUE(2)}, {18100, CALCULATED_VALUE(3)}, {21600, 21600}
    4066             : };
    4067             : 
    4068             : const unsigned short TEXT_DEFLATE_SEGMENTS[] =
    4069             : {
    4070             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    4071             : };
    4072             : 
    4073             : const Calculation TEXT_DEFLATE_CALC[] =
    4074             : {
    4075             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 5320, 7100}, {0x8000, 21600, 0, 0x400}, {0x8000, 21600, 0, 0x401}
    4076             : };
    4077             : 
    4078             : const TextRectangle TEXT_DEFLATE_TRS[] =
    4079             : {
    4080             :   { {0, 0}, {21600, 21600} }
    4081             : };
    4082             : 
    4083             : const int TEXT_DEFLATE_DEFAULT_ADJUST[] =
    4084             : {
    4085             :   8100
    4086             : };
    4087             : 
    4088           0 : const CustomShape CS_TEXT_DEFLATE(
    4089             :   TEXT_DEFLATE_VERTICES, sizeof(TEXT_DEFLATE_VERTICES) / sizeof(Vertex),
    4090             :   TEXT_DEFLATE_SEGMENTS, sizeof(TEXT_DEFLATE_SEGMENTS) / sizeof(unsigned short),
    4091             :   TEXT_DEFLATE_CALC, sizeof(TEXT_DEFLATE_CALC) / sizeof(Calculation),
    4092             :   TEXT_DEFLATE_DEFAULT_ADJUST, sizeof(TEXT_DEFLATE_DEFAULT_ADJUST) / sizeof(int),
    4093             :   TEXT_DEFLATE_TRS, sizeof(TEXT_DEFLATE_TRS) / sizeof(TextRectangle),
    4094             :   21600, 21600,
    4095             :   NULL, 0);
    4096             : 
    4097             : const Vertex TEXT_INFLATE_BOTTOM_VERTICES[] =
    4098             : {
    4099             :   {0, 0}, {21600, 0}, {0, CALCULATED_VALUE(0)}, {3500, CALCULATED_VALUE(3)}, {7300, 21600}, {10800, 21600}, {14300, 21600}, {18100, CALCULATED_VALUE(3)}, {21600, CALCULATED_VALUE(0)}
    4100             : };
    4101             : 
    4102             : const unsigned short TEXT_INFLATE_BOTTOM_SEGMENTS[] =
    4103             : {
    4104             :   0x4000, 0x0001, 0x8000, 0x4000, 0x2002, 0x8000
    4105             : };
    4106             : 
    4107             : const Calculation TEXT_INFLATE_BOTTOM_CALC[] =
    4108             : {
    4109             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, 0x400, 0, 11150}, {0x2001, 0x401, 3900, 10450}, {0x2000, 0x402, 17700, 0}
    4110             : };
    4111             : 
    4112             : const TextRectangle TEXT_INFLATE_BOTTOM_TRS[] =
    4113             : {
    4114             :   { {0, 0}, {21600, 21600} }
    4115             : };
    4116             : 
    4117             : const int TEXT_INFLATE_BOTTOM_DEFAULT_ADJUST[] =
    4118             : {
    4119             :   14700
    4120             : };
    4121             : 
    4122           0 : const CustomShape CS_TEXT_INFLATE_BOTTOM(
    4123             :   TEXT_INFLATE_BOTTOM_VERTICES, sizeof(TEXT_INFLATE_BOTTOM_VERTICES) / sizeof(Vertex),
    4124             :   TEXT_INFLATE_BOTTOM_SEGMENTS, sizeof(TEXT_INFLATE_BOTTOM_SEGMENTS) / sizeof(unsigned short),
    4125             :   TEXT_INFLATE_BOTTOM_CALC, sizeof(TEXT_INFLATE_BOTTOM_CALC) / sizeof(Calculation),
    4126             :   TEXT_INFLATE_BOTTOM_DEFAULT_ADJUST, sizeof(TEXT_INFLATE_BOTTOM_DEFAULT_ADJUST) / sizeof(int),
    4127             :   TEXT_INFLATE_BOTTOM_TRS, sizeof(TEXT_INFLATE_BOTTOM_TRS) / sizeof(TextRectangle),
    4128             :   21600, 21600,
    4129             :   NULL, 0);
    4130             : 
    4131             : const Vertex TEXT_DEFLATE_BOTTOM_VERTICES[] =
    4132             : {
    4133             :   {0, 0}, {21600, 0}, {0, 21600}, {2900, CALCULATED_VALUE(3)}, {7200, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {14400, CALCULATED_VALUE(0)}, {18700, CALCULATED_VALUE(3)}, {21600, 21600}
    4134             : };
    4135             : 
    4136             : const unsigned short TEXT_DEFLATE_BOTTOM_SEGMENTS[] =
    4137             : {
    4138             :   0x4000, 0x0001, 0x8000, 0x4000, 0x2002, 0x8000
    4139             : };
    4140             : 
    4141             : const Calculation TEXT_DEFLATE_BOTTOM_CALC[] =
    4142             : {
    4143             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, 0x400, 0, 1350}, {0x2001, 0x401, 12070, 20250}, {0x2000, 0x402, 9530, 0}
    4144             : };
    4145             : 
    4146             : const TextRectangle TEXT_DEFLATE_BOTTOM_TRS[] =
    4147             : {
    4148             :   { {0, 0}, {21600, 21600} }
    4149             : };
    4150             : 
    4151             : const int TEXT_DEFLATE_BOTTOM_DEFAULT_ADJUST[] =
    4152             : {
    4153             :   11500
    4154             : };
    4155             : 
    4156           0 : const CustomShape CS_TEXT_DEFLATE_BOTTOM(
    4157             :   TEXT_DEFLATE_BOTTOM_VERTICES, sizeof(TEXT_DEFLATE_BOTTOM_VERTICES) / sizeof(Vertex),
    4158             :   TEXT_DEFLATE_BOTTOM_SEGMENTS, sizeof(TEXT_DEFLATE_BOTTOM_SEGMENTS) / sizeof(unsigned short),
    4159             :   TEXT_DEFLATE_BOTTOM_CALC, sizeof(TEXT_DEFLATE_BOTTOM_CALC) / sizeof(Calculation),
    4160             :   TEXT_DEFLATE_BOTTOM_DEFAULT_ADJUST, sizeof(TEXT_DEFLATE_BOTTOM_DEFAULT_ADJUST) / sizeof(int),
    4161             :   TEXT_DEFLATE_BOTTOM_TRS, sizeof(TEXT_DEFLATE_BOTTOM_TRS) / sizeof(TextRectangle),
    4162             :   21600, 21600,
    4163             :   NULL, 0);
    4164             : 
    4165             : const Vertex TEXT_INFLATE_TOP_VERTICES[] =
    4166             : {
    4167             :   {0, CALCULATED_VALUE(0)}, {3500, CALCULATED_VALUE(1)}, {7300, 0}, {10800, 0}, {14300, 0}, {18100, CALCULATED_VALUE(1)}, {21600, CALCULATED_VALUE(0)}, {0, 21600}, {21600, 21600}
    4168             : };
    4169             : 
    4170             : const unsigned short TEXT_INFLATE_TOP_SEGMENTS[] =
    4171             : {
    4172             :   0x4000, 0x2002, 0x8000, 0x4000, 0x0001, 0x8000
    4173             : };
    4174             : 
    4175             : const Calculation TEXT_INFLATE_TOP_CALC[] =
    4176             : {
    4177             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 3900, 10450}
    4178             : };
    4179             : 
    4180             : const TextRectangle TEXT_INFLATE_TOP_TRS[] =
    4181             : {
    4182             :   { {0, 0}, {21600, 21600} }
    4183             : };
    4184             : 
    4185             : const int TEXT_INFLATE_TOP_DEFAULT_ADJUST[] =
    4186             : {
    4187             :   6900
    4188             : };
    4189             : 
    4190           0 : const CustomShape CS_TEXT_INFLATE_TOP(
    4191             :   TEXT_INFLATE_TOP_VERTICES, sizeof(TEXT_INFLATE_TOP_VERTICES) / sizeof(Vertex),
    4192             :   TEXT_INFLATE_TOP_SEGMENTS, sizeof(TEXT_INFLATE_TOP_SEGMENTS) / sizeof(unsigned short),
    4193             :   TEXT_INFLATE_TOP_CALC, sizeof(TEXT_INFLATE_TOP_CALC) / sizeof(Calculation),
    4194             :   TEXT_INFLATE_TOP_DEFAULT_ADJUST, sizeof(TEXT_INFLATE_TOP_DEFAULT_ADJUST) / sizeof(int),
    4195             :   TEXT_INFLATE_TOP_TRS, sizeof(TEXT_INFLATE_TOP_TRS) / sizeof(TextRectangle),
    4196             :   21600, 21600,
    4197             :   NULL, 0);
    4198             : 
    4199             : const Vertex TEXT_DEFLATE_TOP_VERTICES[] =
    4200             : {
    4201             :   {0, 0}, {2900, CALCULATED_VALUE(1)}, {7200, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {14400, CALCULATED_VALUE(0)}, {18700, CALCULATED_VALUE(1)}, {21600, 0}, {0, 21600}, {21600, 21600}
    4202             : };
    4203             : 
    4204             : const unsigned short TEXT_DEFLATE_TOP_SEGMENTS[] =
    4205             : {
    4206             :   0x4000, 0x2002, 0x8000, 0x4000, 0x0001, 0x8000
    4207             : };
    4208             : 
    4209             : const Calculation TEXT_DEFLATE_TOP_CALC[] =
    4210             : {
    4211             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2001, 0x400, 12070, 20250}
    4212             : };
    4213             : 
    4214             : const TextRectangle TEXT_DEFLATE_TOP_TRS[] =
    4215             : {
    4216             :   { {0, 0}, {21600, 21600} }
    4217             : };
    4218             : 
    4219             : const int TEXT_DEFLATE_TOP_DEFAULT_ADJUST[] =
    4220             : {
    4221             :   10100
    4222             : };
    4223             : 
    4224           0 : const CustomShape CS_TEXT_DEFLATE_TOP(
    4225             :   TEXT_DEFLATE_TOP_VERTICES, sizeof(TEXT_DEFLATE_TOP_VERTICES) / sizeof(Vertex),
    4226             :   TEXT_DEFLATE_TOP_SEGMENTS, sizeof(TEXT_DEFLATE_TOP_SEGMENTS) / sizeof(unsigned short),
    4227             :   TEXT_DEFLATE_TOP_CALC, sizeof(TEXT_DEFLATE_TOP_CALC) / sizeof(Calculation),
    4228             :   TEXT_DEFLATE_TOP_DEFAULT_ADJUST, sizeof(TEXT_DEFLATE_TOP_DEFAULT_ADJUST) / sizeof(int),
    4229             :   TEXT_DEFLATE_TOP_TRS, sizeof(TEXT_DEFLATE_TOP_TRS) / sizeof(TextRectangle),
    4230             :   21600, 21600,
    4231             :   NULL, 0);
    4232             : 
    4233             : const Vertex TEXT_DEFLATE_INFLATE_VERTICES[] =
    4234             : {
    4235             :   {0, 0}, {21600, 0}, {0, 10100}, {3300, CALCULATED_VALUE(3)}, {7100, CALCULATED_VALUE(5)}, {10800, CALCULATED_VALUE(5)}, {14500, CALCULATED_VALUE(5)}, {18300, CALCULATED_VALUE(3)}, {21600, 10100}, {0, 11500}, {3300, CALCULATED_VALUE(4)}, {7100, CALCULATED_VALUE(6)}, {10800, CALCULATED_VALUE(6)}, {14500, CALCULATED_VALUE(6)}, {18300, CALCULATED_VALUE(4)}, {21600, 11500}, {0, 21600}, {21600, 21600}
    4236             : };
    4237             : 
    4238             : const unsigned short TEXT_DEFLATE_INFLATE_SEGMENTS[] =
    4239             : {
    4240             :   0x4000, 0x0001, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x0001, 0x8000
    4241             : };
    4242             : 
    4243             : const Calculation TEXT_DEFLATE_INFLATE_CALC[] =
    4244             : {
    4245             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 10800, 0, 0x400}, {0x2001, 0x401, 5770, 9500}, {0x8000, 10100, 0, 0x402}, {0x8000, 11500, 0, 0x402}, {0x2000, 0x400, 0, 700}, {0x2000, 0x400, 700, 0}
    4246             : };
    4247             : 
    4248             : const TextRectangle TEXT_DEFLATE_INFLATE_TRS[] =
    4249             : {
    4250             :   { {0, 0}, {21600, 21600} }
    4251             : };
    4252             : 
    4253             : const int TEXT_DEFLATE_INFLATE_DEFAULT_ADJUST[] =
    4254             : {
    4255             :   6500
    4256             : };
    4257             : 
    4258           0 : const CustomShape CS_TEXT_DEFLATE_INFLATE(
    4259             :   TEXT_DEFLATE_INFLATE_VERTICES, sizeof(TEXT_DEFLATE_INFLATE_VERTICES) / sizeof(Vertex),
    4260             :   TEXT_DEFLATE_INFLATE_SEGMENTS, sizeof(TEXT_DEFLATE_INFLATE_SEGMENTS) / sizeof(unsigned short),
    4261             :   TEXT_DEFLATE_INFLATE_CALC, sizeof(TEXT_DEFLATE_INFLATE_CALC) / sizeof(Calculation),
    4262             :   TEXT_DEFLATE_INFLATE_DEFAULT_ADJUST, sizeof(TEXT_DEFLATE_INFLATE_DEFAULT_ADJUST) / sizeof(int),
    4263             :   TEXT_DEFLATE_INFLATE_TRS, sizeof(TEXT_DEFLATE_INFLATE_TRS) / sizeof(TextRectangle),
    4264             :   21600, 21600,
    4265             :   NULL, 0);
    4266             : 
    4267             : const Vertex TEXT_DEFLATE_INFLATE_DEFLATE_VERTICES[] =
    4268             : {
    4269             :   {0, 0}, {21600, 0}, {0, 6600}, {3600, CALCULATED_VALUE(3)}, {7250, CALCULATED_VALUE(4)}, {10800, CALCULATED_VALUE(4)}, {14350, CALCULATED_VALUE(4)}, {18000, CALCULATED_VALUE(3)}, {21600, 6600}, {0, 7500}, {3600, CALCULATED_VALUE(5)}, {7250, CALCULATED_VALUE(6)}, {10800, CALCULATED_VALUE(6)}, {14350, CALCULATED_VALUE(6)}, {18000, CALCULATED_VALUE(5)}, {21600, 7500}, {0, 14100}, {3600, CALCULATED_VALUE(9)}, {7250, CALCULATED_VALUE(10)}, {10800, CALCULATED_VALUE(10)}, {14350, CALCULATED_VALUE(10)}, {18000, CALCULATED_VALUE(9)}, {21600, 14100}, {0, 15000}, {3600, CALCULATED_VALUE(7)}, {7250, CALCULATED_VALUE(8)}, {10800, CALCULATED_VALUE(8)}, {14350, CALCULATED_VALUE(8)}, {18000, CALCULATED_VALUE(7)}, {21600, 15000}, {0, 21600}, {21600, 21600}
    4270             : };
    4271             : 
    4272             : const unsigned short TEXT_DEFLATE_INFLATE_DEFLATE_SEGMENTS[] =
    4273             : {
    4274             :   0x4000, 0x0001, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000, 0x4000, 0x0001, 0x8000
    4275             : };
    4276             : 
    4277             : const Calculation TEXT_DEFLATE_INFLATE_DEFLATE_CALC[] =
    4278             : {
    4279             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 850}, {0x2001, 0x400, 6120, 8700}, {0x2000, 0x401, 0, 4280}, {0x4000, 6600, 0x402, 0}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 450}, {0x2000, 0x403, 900, 0}, {0x2000, 0x404, 900, 0}, {0x8000, 21600, 0, 0x403}, {0x8000, 21600, 0, 0x404}, {0x8000, 21600, 0, 0x405}, {0x8000, 21600, 0, 0x406}
    4280             : };
    4281             : 
    4282             : const TextRectangle TEXT_DEFLATE_INFLATE_DEFLATE_TRS[] =
    4283             : {
    4284             :   { {0, 0}, {21600, 21600} }
    4285             : };
    4286             : 
    4287             : const int TEXT_DEFLATE_INFLATE_DEFLATE_DEFAULT_ADJUST[] =
    4288             : {
    4289             :   6050
    4290             : };
    4291             : 
    4292           0 : const CustomShape CS_TEXT_DEFLATE_INFLATE_DEFLATE(
    4293             :   TEXT_DEFLATE_INFLATE_DEFLATE_VERTICES, sizeof(TEXT_DEFLATE_INFLATE_DEFLATE_VERTICES) / sizeof(Vertex),
    4294             :   TEXT_DEFLATE_INFLATE_DEFLATE_SEGMENTS, sizeof(TEXT_DEFLATE_INFLATE_DEFLATE_SEGMENTS) / sizeof(unsigned short),
    4295             :   TEXT_DEFLATE_INFLATE_DEFLATE_CALC, sizeof(TEXT_DEFLATE_INFLATE_DEFLATE_CALC) / sizeof(Calculation),
    4296             :   TEXT_DEFLATE_INFLATE_DEFLATE_DEFAULT_ADJUST, sizeof(TEXT_DEFLATE_INFLATE_DEFLATE_DEFAULT_ADJUST) / sizeof(int),
    4297             :   TEXT_DEFLATE_INFLATE_DEFLATE_TRS, sizeof(TEXT_DEFLATE_INFLATE_DEFLATE_TRS) / sizeof(TextRectangle),
    4298             :   21600, 21600,
    4299             :   NULL, 0);
    4300             : 
    4301             : const Vertex TEXT_FADE_RIGHT_VERTICES[] =
    4302             : {
    4303             :   {0, 0}, {21600, CALCULATED_VALUE(0)}, {0, 21600}, {21600, CALCULATED_VALUE(1)}
    4304             : };
    4305             : 
    4306             : const unsigned short TEXT_FADE_RIGHT_SEGMENTS[] =
    4307             : {
    4308             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4309             : };
    4310             : 
    4311             : const Calculation TEXT_FADE_RIGHT_CALC[] =
    4312             : {
    4313             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4314             : };
    4315             : 
    4316             : const TextRectangle TEXT_FADE_RIGHT_TRS[] =
    4317             : {
    4318             :   { {0, 0}, {21600, 21600} }
    4319             : };
    4320             : 
    4321             : const int TEXT_FADE_RIGHT_DEFAULT_ADJUST[] =
    4322             : {
    4323             :   7200
    4324             : };
    4325             : 
    4326           0 : const CustomShape CS_TEXT_FADE_RIGHT(
    4327             :   TEXT_FADE_RIGHT_VERTICES, sizeof(TEXT_FADE_RIGHT_VERTICES) / sizeof(Vertex),
    4328             :   TEXT_FADE_RIGHT_SEGMENTS, sizeof(TEXT_FADE_RIGHT_SEGMENTS) / sizeof(unsigned short),
    4329             :   TEXT_FADE_RIGHT_CALC, sizeof(TEXT_FADE_RIGHT_CALC) / sizeof(Calculation),
    4330             :   TEXT_FADE_RIGHT_DEFAULT_ADJUST, sizeof(TEXT_FADE_RIGHT_DEFAULT_ADJUST) / sizeof(int),
    4331             :   TEXT_FADE_RIGHT_TRS, sizeof(TEXT_FADE_RIGHT_TRS) / sizeof(TextRectangle),
    4332             :   21600, 21600,
    4333             :   NULL, 0);
    4334             : 
    4335             : const Vertex TEXT_FADE_LEFT_VERTICES[] =
    4336             : {
    4337             :   {0, CALCULATED_VALUE(0)}, {21600, 0}, {0, CALCULATED_VALUE(1)}, {21600, 21600}
    4338             : };
    4339             : 
    4340             : const unsigned short TEXT_FADE_LEFT_SEGMENTS[] =
    4341             : {
    4342             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4343             : };
    4344             : 
    4345             : const Calculation TEXT_FADE_LEFT_CALC[] =
    4346             : {
    4347             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4348             : };
    4349             : 
    4350             : const TextRectangle TEXT_FADE_LEFT_TRS[] =
    4351             : {
    4352             :   { {0, 0}, {21600, 21600} }
    4353             : };
    4354             : 
    4355             : const int TEXT_FADE_LEFT_DEFAULT_ADJUST[] =
    4356             : {
    4357             :   7200
    4358             : };
    4359             : 
    4360           0 : const CustomShape CS_TEXT_FADE_LEFT(
    4361             :   TEXT_FADE_LEFT_VERTICES, sizeof(TEXT_FADE_LEFT_VERTICES) / sizeof(Vertex),
    4362             :   TEXT_FADE_LEFT_SEGMENTS, sizeof(TEXT_FADE_LEFT_SEGMENTS) / sizeof(unsigned short),
    4363             :   TEXT_FADE_LEFT_CALC, sizeof(TEXT_FADE_LEFT_CALC) / sizeof(Calculation),
    4364             :   TEXT_FADE_LEFT_DEFAULT_ADJUST, sizeof(TEXT_FADE_LEFT_DEFAULT_ADJUST) / sizeof(int),
    4365             :   TEXT_FADE_LEFT_TRS, sizeof(TEXT_FADE_LEFT_TRS) / sizeof(TextRectangle),
    4366             :   21600, 21600,
    4367             :   NULL, 0);
    4368             : 
    4369             : const Vertex TEXT_FADE_UP_VERTICES[] =
    4370             : {
    4371             :   {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(1), 0}, {0, 21600}, {21600, 21600}
    4372             : };
    4373             : 
    4374             : const unsigned short TEXT_FADE_UP_SEGMENTS[] =
    4375             : {
    4376             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4377             : };
    4378             : 
    4379             : const Calculation TEXT_FADE_UP_CALC[] =
    4380             : {
    4381             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4382             : };
    4383             : 
    4384             : const TextRectangle TEXT_FADE_UP_TRS[] =
    4385             : {
    4386             :   { {0, 0}, {21600, 21600} }
    4387             : };
    4388             : 
    4389             : const int TEXT_FADE_UP_DEFAULT_ADJUST[] =
    4390             : {
    4391             :   7200
    4392             : };
    4393             : 
    4394           0 : const CustomShape CS_TEXT_FADE_UP(
    4395             :   TEXT_FADE_UP_VERTICES, sizeof(TEXT_FADE_UP_VERTICES) / sizeof(Vertex),
    4396             :   TEXT_FADE_UP_SEGMENTS, sizeof(TEXT_FADE_UP_SEGMENTS) / sizeof(unsigned short),
    4397             :   TEXT_FADE_UP_CALC, sizeof(TEXT_FADE_UP_CALC) / sizeof(Calculation),
    4398             :   TEXT_FADE_UP_DEFAULT_ADJUST, sizeof(TEXT_FADE_UP_DEFAULT_ADJUST) / sizeof(int),
    4399             :   TEXT_FADE_UP_TRS, sizeof(TEXT_FADE_UP_TRS) / sizeof(TextRectangle),
    4400             :   21600, 21600,
    4401             :   NULL, 0);
    4402             : 
    4403             : const Vertex TEXT_FADE_DOWN_VERTICES[] =
    4404             : {
    4405             :   {0, 0}, {21600, 0}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(1), 21600}
    4406             : };
    4407             : 
    4408             : const unsigned short TEXT_FADE_DOWN_SEGMENTS[] =
    4409             : {
    4410             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4411             : };
    4412             : 
    4413             : const Calculation TEXT_FADE_DOWN_CALC[] =
    4414             : {
    4415             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4416             : };
    4417             : 
    4418             : const TextRectangle TEXT_FADE_DOWN_TRS[] =
    4419             : {
    4420             :   { {0, 0}, {21600, 21600} }
    4421             : };
    4422             : 
    4423             : const int TEXT_FADE_DOWN_DEFAULT_ADJUST[] =
    4424             : {
    4425             :   7200
    4426             : };
    4427             : 
    4428           0 : const CustomShape CS_TEXT_FADE_DOWN(
    4429             :   TEXT_FADE_DOWN_VERTICES, sizeof(TEXT_FADE_DOWN_VERTICES) / sizeof(Vertex),
    4430             :   TEXT_FADE_DOWN_SEGMENTS, sizeof(TEXT_FADE_DOWN_SEGMENTS) / sizeof(unsigned short),
    4431             :   TEXT_FADE_DOWN_CALC, sizeof(TEXT_FADE_DOWN_CALC) / sizeof(Calculation),
    4432             :   TEXT_FADE_DOWN_DEFAULT_ADJUST, sizeof(TEXT_FADE_DOWN_DEFAULT_ADJUST) / sizeof(int),
    4433             :   TEXT_FADE_DOWN_TRS, sizeof(TEXT_FADE_DOWN_TRS) / sizeof(TextRectangle),
    4434             :   21600, 21600,
    4435             :   NULL, 0);
    4436             : 
    4437             : const Vertex TEXT_SLANT_UP_VERTICES[] =
    4438             : {
    4439             :   {0, CALCULATED_VALUE(0)}, {21600, 0}, {0, 21600}, {21600, CALCULATED_VALUE(1)}
    4440             : };
    4441             : 
    4442             : const unsigned short TEXT_SLANT_UP_SEGMENTS[] =
    4443             : {
    4444             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4445             : };
    4446             : 
    4447             : const Calculation TEXT_SLANT_UP_CALC[] =
    4448             : {
    4449             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4450             : };
    4451             : 
    4452             : const TextRectangle TEXT_SLANT_UP_TRS[] =
    4453             : {
    4454             :   { {0, 0}, {21600, 21600} }
    4455             : };
    4456             : 
    4457             : const int TEXT_SLANT_UP_DEFAULT_ADJUST[] =
    4458             : {
    4459             :   12000
    4460             : };
    4461             : 
    4462           0 : const CustomShape CS_TEXT_SLANT_UP(
    4463             :   TEXT_SLANT_UP_VERTICES, sizeof(TEXT_SLANT_UP_VERTICES) / sizeof(Vertex),
    4464             :   TEXT_SLANT_UP_SEGMENTS, sizeof(TEXT_SLANT_UP_SEGMENTS) / sizeof(unsigned short),
    4465             :   TEXT_SLANT_UP_CALC, sizeof(TEXT_SLANT_UP_CALC) / sizeof(Calculation),
    4466             :   TEXT_SLANT_UP_DEFAULT_ADJUST, sizeof(TEXT_SLANT_UP_DEFAULT_ADJUST) / sizeof(int),
    4467             :   TEXT_SLANT_UP_TRS, sizeof(TEXT_SLANT_UP_TRS) / sizeof(TextRectangle),
    4468             :   21600, 21600,
    4469             :   NULL, 0);
    4470             : 
    4471             : const Vertex TEXT_SLANT_DOWN_VERTICES[] =
    4472             : {
    4473             :   {0, 0}, {21600, CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(0)}, {21600, 21600}
    4474             : };
    4475             : 
    4476             : const unsigned short TEXT_SLANT_DOWN_SEGMENTS[] =
    4477             : {
    4478             :   0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    4479             : };
    4480             : 
    4481             : const Calculation TEXT_SLANT_DOWN_CALC[] =
    4482             : {
    4483             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}
    4484             : };
    4485             : 
    4486             : const TextRectangle TEXT_SLANT_DOWN_TRS[] =
    4487             : {
    4488             :   { {0, 0}, {21600, 21600} }
    4489             : };
    4490             : 
    4491             : const int TEXT_SLANT_DOWN_DEFAULT_ADJUST[] =
    4492             : {
    4493             :   12000
    4494             : };
    4495             : 
    4496           0 : const CustomShape CS_TEXT_SLANT_DOWN(
    4497             :   TEXT_SLANT_DOWN_VERTICES, sizeof(TEXT_SLANT_DOWN_VERTICES) / sizeof(Vertex),
    4498             :   TEXT_SLANT_DOWN_SEGMENTS, sizeof(TEXT_SLANT_DOWN_SEGMENTS) / sizeof(unsigned short),
    4499             :   TEXT_SLANT_DOWN_CALC, sizeof(TEXT_SLANT_DOWN_CALC) / sizeof(Calculation),
    4500             :   TEXT_SLANT_DOWN_DEFAULT_ADJUST, sizeof(TEXT_SLANT_DOWN_DEFAULT_ADJUST) / sizeof(int),
    4501             :   TEXT_SLANT_DOWN_TRS, sizeof(TEXT_SLANT_DOWN_TRS) / sizeof(TextRectangle),
    4502             :   21600, 21600,
    4503             :   NULL, 0);
    4504             : 
    4505             : const Vertex TEXT_CAN_UP_VERTICES[] =
    4506             : {
    4507             :   {0, CALCULATED_VALUE(1)}, {900, 0}, {7100, 0}, {10800, 0}, {14500, 0}, {20700, 0}, {21600, CALCULATED_VALUE(1)}, {0, 21600}, {900, CALCULATED_VALUE(4)}, {7100, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {14500, CALCULATED_VALUE(0)}, {20700, CALCULATED_VALUE(4)}, {21600, 21600}
    4508             : };
    4509             : 
    4510             : const unsigned short TEXT_CAN_UP_SEGMENTS[] =
    4511             : {
    4512             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    4513             : };
    4514             : 
    4515             : const Calculation TEXT_CAN_UP_CALC[] =
    4516             : {
    4517             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 14400}, {0x4001, 5470, 0x402, 7200}, {0x4000, 16130, 0x403, 0}
    4518             : };
    4519             : 
    4520             : const TextRectangle TEXT_CAN_UP_TRS[] =
    4521             : {
    4522             :   { {0, 0}, {21600, 21600} }
    4523             : };
    4524             : 
    4525             : const int TEXT_CAN_UP_DEFAULT_ADJUST[] =
    4526             : {
    4527             :   18500
    4528             : };
    4529             : 
    4530           0 : const CustomShape CS_TEXT_CAN_UP(
    4531             :   TEXT_CAN_UP_VERTICES, sizeof(TEXT_CAN_UP_VERTICES) / sizeof(Vertex),
    4532             :   TEXT_CAN_UP_SEGMENTS, sizeof(TEXT_CAN_UP_SEGMENTS) / sizeof(unsigned short),
    4533             :   TEXT_CAN_UP_CALC, sizeof(TEXT_CAN_UP_CALC) / sizeof(Calculation),
    4534             :   TEXT_CAN_UP_DEFAULT_ADJUST, sizeof(TEXT_CAN_UP_DEFAULT_ADJUST) / sizeof(int),
    4535             :   TEXT_CAN_UP_TRS, sizeof(TEXT_CAN_UP_TRS) / sizeof(TextRectangle),
    4536             :   21600, 21600,
    4537             :   NULL, 0);
    4538             : 
    4539             : const Vertex TEXT_CAN_DOWN_VERTICES[] =
    4540             : {
    4541             :   {0, 0}, {900, CALCULATED_VALUE(2)}, {7100, CALCULATED_VALUE(0)}, {10800, CALCULATED_VALUE(0)}, {14500, CALCULATED_VALUE(0)}, {20700, CALCULATED_VALUE(2)}, {21600, 0}, {0, CALCULATED_VALUE(1)}, {900, 21600}, {7100, 21600}, {10800, 21600}, {14500, 21600}, {20700, 21600}, {21600, CALCULATED_VALUE(1)}
    4542             : };
    4543             : 
    4544             : const unsigned short TEXT_CAN_DOWN_SEGMENTS[] =
    4545             : {
    4546             :   0x4000, 0x2002, 0x8000, 0x4000, 0x2002, 0x8000
    4547             : };
    4548             : 
    4549             : const Calculation TEXT_CAN_DOWN_CALC[] =
    4550             : {
    4551             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x4001, 5470, 0x400, 7200}
    4552             : };
    4553             : 
    4554             : const TextRectangle TEXT_CAN_DOWN_TRS[] =
    4555             : {
    4556             :   { {0, 0}, {21600, 21600} }
    4557             : };
    4558             : 
    4559             : const int TEXT_CAN_DOWN_DEFAULT_ADJUST[] =
    4560             : {
    4561             :   3100
    4562             : };
    4563             : 
    4564           0 : const CustomShape CS_TEXT_CAN_DOWN(
    4565             :   TEXT_CAN_DOWN_VERTICES, sizeof(TEXT_CAN_DOWN_VERTICES) / sizeof(Vertex),
    4566             :   TEXT_CAN_DOWN_SEGMENTS, sizeof(TEXT_CAN_DOWN_SEGMENTS) / sizeof(unsigned short),
    4567             :   TEXT_CAN_DOWN_CALC, sizeof(TEXT_CAN_DOWN_CALC) / sizeof(Calculation),
    4568             :   TEXT_CAN_DOWN_DEFAULT_ADJUST, sizeof(TEXT_CAN_DOWN_DEFAULT_ADJUST) / sizeof(int),
    4569             :   TEXT_CAN_DOWN_TRS, sizeof(TEXT_CAN_DOWN_TRS) / sizeof(TextRectangle),
    4570             :   21600, 21600,
    4571             :   NULL, 0);
    4572             : 
    4573             : const Vertex FLOW_CHART_ALTERNATE_PROCESS_VERTICES[] =
    4574             : {
    4575             :   {0, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), 0}, {CALCULATED_VALUE(1), 0}, {21600, CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(3)}, {CALCULATED_VALUE(1), 21600}, {CALCULATED_VALUE(0), 21600}, {0, CALCULATED_VALUE(3)}
    4576             : };
    4577             : 
    4578             : const unsigned short FLOW_CHART_ALTERNATE_PROCESS_SEGMENTS[] =
    4579             : {
    4580             :   0x4000, 0xa801, 0x0001, 0xa701, 0x0001, 0xa801, 0x0001, 0xa701, 0x6000, 0x8000
    4581             : };
    4582             : 
    4583             : const Calculation FLOW_CHART_ALTERNATE_PROCESS_CALC[] =
    4584             : {
    4585             :   {0x2000, PROP_GEO_LEFT, 2540, 0}, {0x2000, PROP_GEO_RIGHT, 0, 2540}, {0x2000, PROP_GEO_TOP, 2540, 0}, {0x2000, PROP_GEO_BOTTOM, 0, 2540}, {0x2000, PROP_GEO_LEFT, 800, 0}, {0x2000, PROP_GEO_RIGHT, 0, 800}, {0x2000, PROP_GEO_TOP, 800, 0}, {0x2000, PROP_GEO_BOTTOM, 0, 800}
    4586             : };
    4587             : 
    4588             : const TextRectangle FLOW_CHART_ALTERNATE_PROCESS_TRS[] =
    4589             : {
    4590             :   { {CALCULATED_VALUE(4), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(7)} }
    4591             : };
    4592             : 
    4593             : const Vertex FLOW_CHART_ALTERNATE_PROCESS_GLUE_POINTS[] =
    4594             : {
    4595             :   {0, 10800}, {10800, 0}, {21600, 10800}, {10800, 21600}
    4596             : };
    4597             : 
    4598           0 : const CustomShape CS_FLOW_CHART_ALTERNATE_PROCESS(
    4599             :   FLOW_CHART_ALTERNATE_PROCESS_VERTICES, sizeof(FLOW_CHART_ALTERNATE_PROCESS_VERTICES) / sizeof(Vertex),
    4600             :   FLOW_CHART_ALTERNATE_PROCESS_SEGMENTS, sizeof(FLOW_CHART_ALTERNATE_PROCESS_SEGMENTS) / sizeof(unsigned short),
    4601             :   FLOW_CHART_ALTERNATE_PROCESS_CALC, sizeof(FLOW_CHART_ALTERNATE_PROCESS_CALC) / sizeof(Calculation),
    4602             :   NULL, 0,
    4603             :   FLOW_CHART_ALTERNATE_PROCESS_TRS, sizeof(FLOW_CHART_ALTERNATE_PROCESS_TRS) / sizeof(TextRectangle),
    4604             :   21600, 21600,
    4605             :   FLOW_CHART_ALTERNATE_PROCESS_GLUE_POINTS, sizeof(FLOW_CHART_ALTERNATE_PROCESS_GLUE_POINTS) / sizeof(Vertex));
    4606             : 
    4607             : const Vertex FLOW_CHART_OFFPAGE_CONNECTOR_VERTICES[] =
    4608             : {
    4609             :   {0, 0}, {21600, 0}, {21600, 17150}, {10800, 21600}, {0, 17150}, {0, 0}
    4610             : };
    4611             : 
    4612             : const TextRectangle FLOW_CHART_OFFPAGE_CONNECTOR_TRS[] =
    4613             : {
    4614             :   { {0, 0}, {21600, 17150} }
    4615             : };
    4616             : 
    4617             : const Vertex FLOW_CHART_OFFPAGE_CONNECTOR_GLUE_POINTS[] =
    4618             : {
    4619             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    4620             : };
    4621             : 
    4622           0 : const CustomShape CS_FLOW_CHART_OFFPAGE_CONNECTOR(
    4623             :   FLOW_CHART_OFFPAGE_CONNECTOR_VERTICES, sizeof(FLOW_CHART_OFFPAGE_CONNECTOR_VERTICES) / sizeof(Vertex),
    4624             :   NULL, 0,
    4625             :   NULL, 0,
    4626             :   NULL, 0,
    4627             :   FLOW_CHART_OFFPAGE_CONNECTOR_TRS, sizeof(FLOW_CHART_OFFPAGE_CONNECTOR_TRS) / sizeof(TextRectangle),
    4628             :   21600, 21600,
    4629             :   FLOW_CHART_OFFPAGE_CONNECTOR_GLUE_POINTS, sizeof(FLOW_CHART_OFFPAGE_CONNECTOR_GLUE_POINTS) / sizeof(Vertex));
    4630             : 
    4631             : const Vertex LEFT_RIGHT_UP_ARROW_VERTICES[] =
    4632             : {
    4633             :   {10800, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(0)}, {21600, 10800}, {CALCULATED_VALUE(5), CALCULATED_VALUE(3)}, {CALCULATED_VALUE(5), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(3)}, {0, 10800}, {CALCULATED_VALUE(2), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(2), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}
    4634             : };
    4635             : 
    4636             : const unsigned short LEFT_RIGHT_UP_ARROW_SEGMENTS[] =
    4637             : {
    4638             :   0x4000, 0x0010, 0x6001, 0x8000
    4639             : };
    4640             : 
    4641             : const Calculation LEFT_RIGHT_UP_ARROW_CALC[] =
    4642             : {
    4643             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x6001, 0x0403, PROP_ADJUST_VAL_FIRST + 2, 21600}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST + 1}, {0x8000, 21600, 0, 0x0402}
    4644             : };
    4645             : 
    4646             : const TextRectangle LEFT_RIGHT_UP_ARROW_TRS[] =
    4647             : {
    4648             :   { {0, 0}, {21600, 21600} }
    4649             : };
    4650             : 
    4651             : const int LEFT_RIGHT_UP_ARROW_DEFAULT_ADJUST[] =
    4652             : {
    4653             :   6500, 8600, 6200
    4654             : };
    4655             : 
    4656           0 : const CustomShape CS_LEFT_RIGHT_UP_ARROW(
    4657             :   LEFT_RIGHT_UP_ARROW_VERTICES, sizeof(LEFT_RIGHT_UP_ARROW_VERTICES) / sizeof(Vertex),
    4658             :   LEFT_RIGHT_UP_ARROW_SEGMENTS, sizeof(LEFT_RIGHT_UP_ARROW_SEGMENTS) / sizeof(unsigned short),
    4659             :   LEFT_RIGHT_UP_ARROW_CALC, sizeof(LEFT_RIGHT_UP_ARROW_CALC) / sizeof(Calculation),
    4660             :   LEFT_RIGHT_UP_ARROW_DEFAULT_ADJUST, sizeof(LEFT_RIGHT_UP_ARROW_DEFAULT_ADJUST) / sizeof(int),
    4661             :   LEFT_RIGHT_UP_ARROW_TRS, sizeof(LEFT_RIGHT_UP_ARROW_TRS) / sizeof(TextRectangle),
    4662             :   21600, 21600,
    4663             :   NULL, 0);
    4664             : 
    4665             : const Vertex SUN_VERTICES[] =
    4666             : {
    4667             :   {0, 10800}, {CALCULATED_VALUE(4), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(4), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0x0a), CALCULATED_VALUE(0x0b)}, {CALCULATED_VALUE(0x0c), CALCULATED_VALUE(0x0d)}, {CALCULATED_VALUE(0x0e), CALCULATED_VALUE(0x0f)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x11)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x13)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0x15)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x17)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x19)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x1b)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x1d)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x1f)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x21)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0x23)}, {CALCULATED_VALUE(0x24), CALCULATED_VALUE(0x25)}, {CALCULATED_VALUE(0x26), CALCULATED_VALUE(0x27)}, {CALCULATED_VALUE(0x28), CALCULATED_VALUE(0x29)}, {CALCULATED_VALUE(0x2a), CALCULATED_VALUE(0x2b)}, {CALCULATED_VALUE(0x2c), CALCULATED_VALUE(0x2d)}, {CALCULATED_VALUE(0x2e), CALCULATED_VALUE(0x2f)}, {CALCULATED_VALUE(0x30), CALCULATED_VALUE(0x31)}, {CALCULATED_VALUE(0x32), CALCULATED_VALUE(0x33)}, {10800, 10800}, {CALCULATED_VALUE(0x36), CALCULATED_VALUE(0x36)}, {0, 360}
    4668             : };
    4669             : 
    4670             : const unsigned short SUN_SEGMENTS[] =
    4671             : {
    4672             :   0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0xa203, 0x6000, 0x8000
    4673             : };
    4674             : 
    4675             : const Calculation SUN_CALC[] =
    4676             : {
    4677             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2000, PROP_ADJUST_VAL_FIRST, 0, 2700}, {0x2001, 0x402, 5080, 7425}, {0x2000, 0x403, 2540, 0}, {0x8000, 10125, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x405, 2120, 7425}, {0x2000, 0x406, 210, 0}, {0x4000, 10800, 0x407, 0}, {0x8000, 10800, 0, 0x407}, {0x0081, 0, 10800, 45}, {0x0082, 0, 10800, 45}, {0x6081, 0x404, 0x408, 45}, {0x6082, 0x404, 0x408, 45}, {0x6081, 0x404, 0x409, 45}, {0x6082, 0x404, 0x409, 45}, {0x0081, 0, 10800, 90}, {0x0082, 0, 10800, 90}, {0x6081, 0x404, 0x408, 90}, {0x6082, 0x404, 0x408, 90}, {0x6081, 0x404, 0x409, 90}, {0x6082, 0x404, 0x409, 90}, {0x0081, 0, 10800, 135}, {0x0082, 0, 10800, 135}, {0x6081, 0x404, 0x408, 135}, {0x6082, 0x404, 0x408, 135}, {0x6081, 0x404, 0x409, 135}, {0x6082, 0x404, 0x409, 135}, {0x0081, 0, 10800, 180}, {0x0082, 0, 10800, 180}, {0x6081, 0x404, 0x408, 180}, {0x6082, 0x404, 0x408, 180}, {0x6081, 0x404, 0x409, 180}, {0x6082, 0x404, 0x409, 180}, {0x0081, 0, 10800, 225}, {0x0082, 0, 10800, 225}, {0x6081, 0x404, 0x408, 225}, {0x6082, 0x404, 0x408, 225}, {0x6081, 0x404, 0x409, 225}, {0x6082, 0x404, 0x409, 225}, {0x0081, 0, 10800, 270}, {0x0082, 0, 10800, 270}, {0x6081, 0x404, 0x408, 270}, {0x6082, 0x404, 0x408, 270}, {0x6081, 0x404, 0x409, 270}, {0x6082, 0x404, 0x409, 270}, {0x0081, 0, 10800, 315}, {0x0082, 0, 10800, 315}, {0x6081, 0x404, 0x408, 315}, {0x6082, 0x404, 0x408, 315}, {0x6081, 0x404, 0x409, 315}, {0x6082, 0x404, 0x409, 315}, {0x2081, PROP_ADJUST_VAL_FIRST, 10800, 45}, {0x2081, PROP_ADJUST_VAL_FIRST, 10800, 225}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}
    4678             : };
    4679             : 
    4680             : const TextRectangle SUN_TRS[] =
    4681             : {
    4682             :   { {CALCULATED_VALUE(0x34), CALCULATED_VALUE(0x34)}, {CALCULATED_VALUE(0x35), CALCULATED_VALUE(0x35)} }
    4683             : };
    4684             : 
    4685             : const int SUN_DEFAULT_ADJUST[] =
    4686             : {
    4687             :   5400
    4688             : };
    4689             : 
    4690             : const Vertex SUN_GLUE_POINTS[] =
    4691             : {
    4692             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    4693             : };
    4694             : 
    4695           0 : const CustomShape CS_SUN(
    4696             :   SUN_VERTICES, sizeof(SUN_VERTICES) / sizeof(Vertex),
    4697             :   SUN_SEGMENTS, sizeof(SUN_SEGMENTS) / sizeof(unsigned short),
    4698             :   SUN_CALC, sizeof(SUN_CALC) / sizeof(Calculation),
    4699             :   SUN_DEFAULT_ADJUST, sizeof(SUN_DEFAULT_ADJUST) / sizeof(int),
    4700             :   SUN_TRS, sizeof(SUN_TRS) / sizeof(TextRectangle),
    4701             :   21600, 21600,
    4702             :   SUN_GLUE_POINTS, sizeof(SUN_GLUE_POINTS) / sizeof(Vertex));
    4703             : 
    4704             : const Vertex MOON_VERTICES[] =
    4705             : {
    4706             :   {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0), 5080}, {CALCULATED_VALUE(0), 10800}, {CALCULATED_VALUE(0), 16520}, {CALCULATED_VALUE(3), CALCULATED_VALUE(5)}, {21600, 21600}, {9740, 21600}, {0, 16730}, {0, 10800}, {0, 4870}, {9740, 0}, {21600, 0}
    4707             : };
    4708             : 
    4709             : const unsigned short MOON_SEGMENTS[] =
    4710             : {
    4711             :   0x4000, 0x2004, 0x6000, 0x8000
    4712             : };
    4713             : 
    4714             : const Calculation MOON_CALC[] =
    4715             : {
    4716             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x401, 1, 2}, {0x6000, 0x402, PROP_ADJUST_VAL_FIRST, 0}, {0x2001, PROP_ADJUST_VAL_FIRST, 1794, 10000}, {0x8000, 21600, 0, 0x0404}, {0x2001, PROP_ADJUST_VAL_FIRST, 400, 18900}, {0x8081, 0, 10800, 0x406}, {0x8082, 0, 10800, 0x406}, {0x6000, 0x407, 0x407, 0}, {0x8000, 21600, 0, 0x408}
    4717             : };
    4718             : 
    4719             : const TextRectangle MOON_TRS[] =
    4720             : {
    4721             :   { {CALCULATED_VALUE(9), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(10)} }
    4722             : };
    4723             : 
    4724             : const int MOON_DEFAULT_ADJUST[] =
    4725             : {
    4726             :   10800
    4727             : };
    4728             : 
    4729             : const Vertex MOON_GLUE_POINTS[] =
    4730             : {
    4731             :   {21600, 0}, {0, 10800}, {21600, 21600}, {CALCULATED_VALUE(0), 10800}
    4732             : };
    4733             : 
    4734           0 : const CustomShape CS_MOON(
    4735             :   MOON_VERTICES, sizeof(MOON_VERTICES) / sizeof(Vertex),
    4736             :   MOON_SEGMENTS, sizeof(MOON_SEGMENTS) / sizeof(unsigned short),
    4737             :   MOON_CALC, sizeof(MOON_CALC) / sizeof(Calculation),
    4738             :   MOON_DEFAULT_ADJUST, sizeof(MOON_DEFAULT_ADJUST) / sizeof(int),
    4739             :   MOON_TRS, sizeof(MOON_TRS) / sizeof(TextRectangle),
    4740             :   21600, 21600,
    4741             :   MOON_GLUE_POINTS, sizeof(MOON_GLUE_POINTS) / sizeof(Vertex));
    4742             : 
    4743             : const Vertex BRACKET_PAIR_VERTICES[] =
    4744             : {
    4745             :   {CALCULATED_VALUE(0), 0}, {0, CALCULATED_VALUE(1)}, {0, CALCULATED_VALUE(2)}, {CALCULATED_VALUE(0), 21600}, {CALCULATED_VALUE(3), 21600}, {21600, CALCULATED_VALUE(2)}, {21600, CALCULATED_VALUE(1)}, {CALCULATED_VALUE(3), 0}
    4746             : };
    4747             : 
    4748             : const unsigned short BRACKET_PAIR_SEGMENTS[] =
    4749             : {
    4750             :   0x4000, 0xa701, 0x0001, 0xa801, 0x8000, 0x4000, 0xa701, 0x0001, 0xa801, 0x8000
    4751             : };
    4752             : 
    4753             : const Calculation BRACKET_PAIR_CALC[] =
    4754             : {
    4755             :   {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0x2082, PROP_ADJUST_VAL_FIRST, 0, 45}, {0x2000, 0x404, 0, 10800}, {0x8000, 0, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, 0x406, 0, 0x405}, {0xa000, PROP_GEO_LEFT, 0, 0x407}, {0xa000, PROP_GEO_TOP, 0, 0x407}, {0x6000, PROP_GEO_RIGHT, 0x407, 0}, {0x6000, PROP_GEO_BOTTOM, 0x407, 0}, {0xa000, PROP_GEO_LEFT, 0, 0x405}, {0xa000, PROP_GEO_TOP, 0, 0x405}, {0x6000, PROP_GEO_RIGHT, 0x405, 0}, {0x6000, PROP_GEO_BOTTOM, 0x405, 0}
    4756             : };
    4757             : 
    4758             : const TextRectangle BRACKET_PAIR_TRS[] =
    4759             : {
    4760             :   { {CALCULATED_VALUE(8), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(10), CALCULATED_VALUE(11)} }
    4761             : };
    4762             : 
    4763             : const int BRACKET_PAIR_DEFAULT_ADJUST[] =
    4764             : {
    4765             :   3700
    4766             : };
    4767             : 
    4768             : const Vertex BRACKET_PAIR_GLUE_POINTS[] =
    4769             : {
    4770             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    4771             : };
    4772             : 
    4773           0 : const CustomShape CS_BRACKET_PAIR(
    4774             :   BRACKET_PAIR_VERTICES, sizeof(BRACKET_PAIR_VERTICES) / sizeof(Vertex),
    4775             :   BRACKET_PAIR_SEGMENTS, sizeof(BRACKET_PAIR_SEGMENTS) / sizeof(unsigned short),
    4776             :   BRACKET_PAIR_CALC, sizeof(BRACKET_PAIR_CALC) / sizeof(Calculation),
    4777             :   BRACKET_PAIR_DEFAULT_ADJUST, sizeof(BRACKET_PAIR_DEFAULT_ADJUST) / sizeof(int),
    4778             :   BRACKET_PAIR_TRS, sizeof(BRACKET_PAIR_TRS) / sizeof(TextRectangle),
    4779             :   21600, 21600,
    4780             :   BRACKET_PAIR_GLUE_POINTS, sizeof(BRACKET_PAIR_GLUE_POINTS) / sizeof(Vertex));
    4781             : 
    4782             : const Vertex BRACE_PAIR_VERTICES[] =
    4783             : {
    4784             :   {CALCULATED_VALUE(4), 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(6)}, {0, 10800}, {CALCULATED_VALUE(0), CALCULATED_VALUE(7)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(4), 21600}, {CALCULATED_VALUE(8), 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(7)}, {21600, 10800}, {CALCULATED_VALUE(3), CALCULATED_VALUE(6)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(8), 0}
    4785             : };
    4786             : 
    4787             : const unsigned short BRACE_PAIR_SEGMENTS[] =
    4788             : {
    4789             :   0x4000, 0xa701, 0x0001, 0xa801, 0xa701, 0x0001, 0xa801, 0x8000, 0x4000, 0xa701, 0x0001, 0xa801, 0xa701, 0x0001, 0xa801, 0x8000
    4790             : };
    4791             : 
    4792             : const Calculation BRACE_PAIR_CALC[] =
    4793             : {
    4794             :   {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x400, 2, 1}, {0x2001, PROP_ADJUST_VAL_FIRST, 2, 1}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 21600, 0, 0x406}, {0xa000, PROP_GEO_RIGHT, 0, 0x405}, {0x2001, PROP_ADJUST_VAL_FIRST, 1, 3}, {0x6000, 0x409, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_LEFT, 0x40a, 0}, {0x6000, PROP_GEO_TOP, 0x409, 0}, {0xa000, PROP_GEO_RIGHT, 0, 0x40a}, {0xa000, PROP_GEO_BOTTOM, 0, 0x409}
    4795             : };
    4796             : 
    4797             : const TextRectangle BRACE_PAIR_TRS[] =
    4798             : {
    4799             :   { {CALCULATED_VALUE(11), CALCULATED_VALUE(12)}, {CALCULATED_VALUE(13), CALCULATED_VALUE(14)} }
    4800             : };
    4801             : 
    4802             : const int BRACE_PAIR_DEFAULT_ADJUST[] =
    4803             : {
    4804             :   1800
    4805             : };
    4806             : 
    4807             : const Vertex BRACE_PAIR_GLUE_POINTS[] =
    4808             : {
    4809             :   {10800, 0}, {0, 10800}, {10800, 21600}, {21600, 10800}
    4810             : };
    4811             : 
    4812           0 : const CustomShape CS_BRACE_PAIR(
    4813             :   BRACE_PAIR_VERTICES, sizeof(BRACE_PAIR_VERTICES) / sizeof(Vertex),
    4814             :   BRACE_PAIR_SEGMENTS, sizeof(BRACE_PAIR_SEGMENTS) / sizeof(unsigned short),
    4815             :   BRACE_PAIR_CALC, sizeof(BRACE_PAIR_CALC) / sizeof(Calculation),
    4816             :   BRACE_PAIR_DEFAULT_ADJUST, sizeof(BRACE_PAIR_DEFAULT_ADJUST) / sizeof(int),
    4817             :   BRACE_PAIR_TRS, sizeof(BRACE_PAIR_TRS) / sizeof(TextRectangle),
    4818             :   21600, 21600,
    4819             :   BRACE_PAIR_GLUE_POINTS, sizeof(BRACE_PAIR_GLUE_POINTS) / sizeof(Vertex));
    4820             : 
    4821             : const Vertex DOUBLE_WAVE_VERTICES[] =
    4822             : {
    4823             :   {CALCULATED_VALUE(7), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(15), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x1f), CALCULATED_VALUE(9)}, {CALCULATED_VALUE(16), CALCULATED_VALUE(10)}, {CALCULATED_VALUE(12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(24), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(25), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(0x21), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(26)}, {CALCULATED_VALUE(27), CALCULATED_VALUE(28)}, {CALCULATED_VALUE(29), CALCULATED_VALUE(1)}
    4824             : };
    4825             : 
    4826             : const unsigned short DOUBLE_WAVE_SEGMENTS[] =
    4827             : {
    4828             :   0x4000, 0x2002, 0x0001, 0x2002, 0x6000, 0x8000
    4829             : };
    4830             : 
    4831             : const Calculation DOUBLE_WAVE_CALC[] =
    4832             : {
    4833             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x8000, 21600, 0, 0x400}, {0x2000, PROP_ADJUST_VAL_FIRST + 1, 0, 0}, {0x2000, 0x402, 0, 10800}, {0x2001, 0x403, 2, 1}, {0x2003, 0x404, 0, 0}, {0x8000, 4320, 0, 0x405}, {0xa006, 0x403, 0, 0x405}, {0x4001, 7900, 0x400, 2230}, {0xa000, 0x400, 0, 0x408}, {0x6000, 0x400, 0x408, 0}, {0x8000, 21600, 0, 0x404}, {0x6006, 0x403, 0x40b, 21600}, {0xa000, 0x40c, 0, 0x407}, {0x2001, 0x405, 1, 2}, {0xa000, 0x407, 3600, 0x40e}, {0x6000, 0x40c, 0x40e, 3600}, {0x2001, 0x40d, 1, 2}, {0x6000, 0x407, 0x411, 0}, {0x8000, 21600, 0, 0x412}, {0x2001, 0x405, 1, 2}, {0x8000, 21600, 0, 0x414}, {0x2001, 0x400, 2, 1}, {0x8000, 21600, 0, 0x416}, {0x8000, 21600, 0, 0x407}, {0x8000, 21600, 0, 0x40f}, {0x6000, 0x401, 0x408, 0}, {0x8000, 21600, 0, 0x410}, {0xa000, 0x401, 0, 0x408}, {0x8000, 21600, 0, 0x40c}, {0xa000, 0x412, 0, 0x40e}, {0x6000, 0x412, 0x40e, 0}, {0xa000, 0x413, 0, 0x40e}, {0x6000, 0x413, 0x40e, 0}
    4834             : };
    4835             : 
    4836             : const TextRectangle DOUBLE_WAVE_TRS[] =
    4837             : {
    4838             :   { {CALCULATED_VALUE(5), CALCULATED_VALUE(22)}, {CALCULATED_VALUE(11), CALCULATED_VALUE(23)} }
    4839             : };
    4840             : 
    4841             : const int DOUBLE_WAVE_DEFAULT_ADJUST[] =
    4842             : {
    4843             :   1400, 10800
    4844             : };
    4845             : 
    4846             : const Vertex DOUBLE_WAVE_GLUE_POINTS[] =
    4847             : {
    4848             :   {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0x14), 10800}, {CALCULATED_VALUE(0x13), CALCULATED_VALUE(1)}, {CALCULATED_VALUE(0x15), 10800}
    4849             : };
    4850             : 
    4851           0 : const CustomShape CS_DOUBLE_WAVE(
    4852             :   DOUBLE_WAVE_VERTICES, sizeof(DOUBLE_WAVE_VERTICES) / sizeof(Vertex),
    4853             :   DOUBLE_WAVE_SEGMENTS, sizeof(DOUBLE_WAVE_SEGMENTS) / sizeof(unsigned short),
    4854             :   DOUBLE_WAVE_CALC, sizeof(DOUBLE_WAVE_CALC) / sizeof(Calculation),
    4855             :   DOUBLE_WAVE_DEFAULT_ADJUST, sizeof(DOUBLE_WAVE_DEFAULT_ADJUST) / sizeof(int),
    4856             :   DOUBLE_WAVE_TRS, sizeof(DOUBLE_WAVE_TRS) / sizeof(TextRectangle),
    4857             :   21600, 21600,
    4858             :   DOUBLE_WAVE_GLUE_POINTS, sizeof(DOUBLE_WAVE_GLUE_POINTS) / sizeof(Vertex));
    4859             : 
    4860             : const Vertex ACTION_BUTTON_BLANK_VERTICES[] =
    4861             : {
    4862             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(0)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(0), CALCULATED_VALUE(2)}
    4863             : };
    4864             : 
    4865             : const unsigned short ACTION_BUTTON_BLANK_SEGMENTS[] =
    4866             : {
    4867             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
    4868             : };
    4869             : 
    4870             : const Calculation ACTION_BUTTON_BLANK_CALC[] =
    4871             : {
    4872             :   {0x2001, PROP_ADJUST_VAL_FIRST, 21599, 21600}, {0xa000, PROP_GEO_RIGHT, 0, 0x400}, {0xa000, PROP_GEO_BOTTOM, 0, 0x400}
    4873             : };
    4874             : 
    4875             : const TextRectangle ACTION_BUTTON_BLANK_TRS[] =
    4876             : {
    4877             :   { {CALCULATED_VALUE(0), CALCULATED_VALUE(0)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)} }
    4878             : };
    4879             : 
    4880             : const int ACTION_BUTTON_BLANK_DEFAULT_ADJUST[] =
    4881             : {
    4882             :   1400
    4883             : };
    4884             : 
    4885           0 : const CustomShape CS_ACTION_BUTTON_BLANK(
    4886             :   ACTION_BUTTON_BLANK_VERTICES, sizeof(ACTION_BUTTON_BLANK_VERTICES) / sizeof(Vertex),
    4887             :   ACTION_BUTTON_BLANK_SEGMENTS, sizeof(ACTION_BUTTON_BLANK_SEGMENTS) / sizeof(unsigned short),
    4888             :   ACTION_BUTTON_BLANK_CALC, sizeof(ACTION_BUTTON_BLANK_CALC) / sizeof(Calculation),
    4889             :   ACTION_BUTTON_BLANK_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_BLANK_DEFAULT_ADJUST) / sizeof(int),
    4890             :   ACTION_BUTTON_BLANK_TRS, sizeof(ACTION_BUTTON_BLANK_TRS) / sizeof(TextRectangle),
    4891             :   21600, 21600,
    4892             :   NULL, 0);
    4893             : 
    4894             : const Vertex ACTION_BUTTON_HOME_VERTICES[] =
    4895             : {
    4896             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0xa)}, {CALCULATED_VALUE(0xc), CALCULATED_VALUE(0xe)}, {CALCULATED_VALUE(0xc), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0xc), CALCULATED_VALUE(0xe)}, {CALCULATED_VALUE(0xc), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x1a)}
    4897             : };
    4898             : 
    4899             : const unsigned short ACTION_BUTTON_HOME_SEGMENTS[] =
    4900             : {
    4901             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x000a, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0007, 0x6001, 0x8000
    4902             : };
    4903             : 
    4904             : const Calculation ACTION_BUTTON_HOME_CALC[] =
    4905             : {
    4906             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8000, 0x0406, 1}, {0x6000, 0x0409, 0x0408, 0}, {0x4001, 2960, 0x0406, 1}, {0x6000, 0x040b, 0x0407, 0}, {0x4001, -5000, 0x0406, 1}, {0x6000, 0x040d, 0x0408, 0}, {0x4001, -7000, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, 5000, 0x0406, 1}, {0x6000, 0x0411, 0x0407, 0}, {0x4001, -2960, 0x0406, 1}, {0x6000, 0x0413, 0x0408, 0}, {0x4001, 8000, 0x0406, 1}, {0x6000, 0x0415, 0x0407, 0}, {0x4001, 6100, 0x0406, 1}, {0x6000, 0x0417, 0x0407, 0}, {0x4001, 8260, 0x0406, 1}, {0x6000, 0x0419, 0x0408, 0}, {0x4001, -6100, 0x0406, 1}, {0x6000, 0x041b, 0x0407, 0}, {0x4001, -8000, 0x0406, 1}, {0x6000, 0x041d, 0x0407, 0}, {0x4001, -1060, 0x0406, 1}, {0x6000, 0x041f, 0x0407, 0}, {0x4001, 1060, 0x0406, 1}, {0x6000, 0x0421, 0x0407, 0}, {0x4001, 4020, 0x0406, 1}, {0x6000, 0x0423, 0x0408, 0}
    4907             : };
    4908             : 
    4909             : const TextRectangle ACTION_BUTTON_HOME_TRS[] =
    4910             : {
    4911             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    4912             : };
    4913             : 
    4914             : const int ACTION_BUTTON_HOME_DEFAULT_ADJUST[] =
    4915             : {
    4916             :   1400
    4917             : };
    4918             : 
    4919           0 : const CustomShape CS_ACTION_BUTTON_HOME(
    4920             :   ACTION_BUTTON_HOME_VERTICES, sizeof(ACTION_BUTTON_HOME_VERTICES) / sizeof(Vertex),
    4921             :   ACTION_BUTTON_HOME_SEGMENTS, sizeof(ACTION_BUTTON_HOME_SEGMENTS) / sizeof(unsigned short),
    4922             :   ACTION_BUTTON_HOME_CALC, sizeof(ACTION_BUTTON_HOME_CALC) / sizeof(Calculation),
    4923             :   ACTION_BUTTON_HOME_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_HOME_DEFAULT_ADJUST) / sizeof(int),
    4924             :   ACTION_BUTTON_HOME_TRS, sizeof(ACTION_BUTTON_HOME_TRS) / sizeof(TextRectangle),
    4925             :   21600, 21600,
    4926             :   NULL, 0);
    4927             : 
    4928             : const Vertex ACTION_BUTTON_HELP_VERTICES[] =
    4929             : {
    4930             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x3e)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x3e)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x28), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2c), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2e), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x2e), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x30), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x30), CALCULATED_VALUE(0x32)}, {CALCULATED_VALUE(0x34), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x36)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x32)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x38)}, {CALCULATED_VALUE(0x3a), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x3c)}, {CALCULATED_VALUE(0x34), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x34), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x34), CALCULATED_VALUE(0x14)}
    4931             : };
    4932             : 
    4933             : const unsigned short ACTION_BUTTON_HELP_SEGMENTS[] =
    4934             : {
    4935             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0xa704, 0x6000, 0x8000, 0x4000, 0x0001, 0x2004, 0x0001, 0x2004, 0x0001, 0x6001, 0x8000
    4936             : };
    4937             : 
    4938             : const Calculation ACTION_BUTTON_HELP_CALC[] =
    4939             : {
    4940             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -1690, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, 4600, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 1690, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 7980, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, 1270, 0x0406, 1}, {0x6000, 0x0411, 0x0407, 0}, {0x4001, 4000, 0x0406, 1}, {0x6000, 0x0413, 0x0408, 0}, {0x4001, 1750, 0x0406, 1}, {0x6000, 0x0415, 0x0408, 0}, {0x4001, 800, 0x0406, 1}, {0x6000, 0x0417, 0x0408, 0}, {0x4001, 1650, 0x0406, 1}, {0x6000, 0x0419, 0x0407, 0}, {0x4001, 2340, 0x0406, 1}, {0x6000, 0x041b, 0x0407, 0}, {0x4001, 3640, 0x0406, 1}, {0x6000, 0x041d, 0x0407, 0}, {0x4001, 4670, 0x0406, 1}, {0x6000, 0x041f, 0x0407, 0}, {0x4001, -1570, 0x0406, 1}, {0x6000, 0x0421, 0x0408, 0}, {0x4001, -3390, 0x0406, 1}, {0x6000, 0x0423, 0x0408, 0}, {0x4001, -6050, 0x0406, 1}, {0x6000, 0x0425, 0x0408, 0}, {0x4001, 2540, 0x0406, 1}, {0x6000, 0x0427, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0429, 0x0408, 0}, {0x4001, -2540, 0x0406, 1}, {0x6000, 0x042b, 0x0407, 0}, {0x4001, -4460, 0x0406, 1}, {0x6000, 0x042d, 0x0407, 0}, {0x4001, -2330, 0x0406, 1}, {0x6000, 0x042f, 0x0407, 0}, {0x4001, -4700, 0x0406, 1}, {0x6000, 0x0431, 0x0408, 0}, {0x4001, -1270, 0x0406, 1}, {0x6000, 0x0433, 0x0407, 0}, {0x4001, -5720, 0x0406, 1}, {0x6000, 0x0435, 0x0408, 0}, {0x4001, -2540, 0x0406, 1}, {0x6000, 0x0437, 0x0408, 0}, {0x4001, 1800, 0x0406, 1}, {0x6000, 0x0439, 0x0407, 0}, {0x4001, -1700, 0x0406, 1}, {0x6000, 0x043b, 0x0408, 0}, {0x4001, 6290, 0x0406, 1}, {0x6000, 0x043d, 0x0408, 0}
    4941             : };
    4942             : 
    4943             : const TextRectangle ACTION_BUTTON_HELP_TRS[] =
    4944             : {
    4945             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    4946             : };
    4947             : 
    4948             : const int ACTION_BUTTON_HELP_DEFAULT_ADJUST[] =
    4949             : {
    4950             :   1400
    4951             : };
    4952             : 
    4953           0 : const CustomShape CS_ACTION_BUTTON_HELP(
    4954             :   ACTION_BUTTON_HELP_VERTICES, sizeof(ACTION_BUTTON_HELP_VERTICES) / sizeof(Vertex),
    4955             :   ACTION_BUTTON_HELP_SEGMENTS, sizeof(ACTION_BUTTON_HELP_SEGMENTS) / sizeof(unsigned short),
    4956             :   ACTION_BUTTON_HELP_CALC, sizeof(ACTION_BUTTON_HELP_CALC) / sizeof(Calculation),
    4957             :   ACTION_BUTTON_HELP_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_HELP_DEFAULT_ADJUST) / sizeof(int),
    4958             :   ACTION_BUTTON_HELP_TRS, sizeof(ACTION_BUTTON_HELP_TRS) / sizeof(TextRectangle),
    4959             :   21600, 21600,
    4960             :   NULL, 0);
    4961             : 
    4962             : const Vertex ACTION_BUTTON_INFORMATION_VERTICES[] =
    4963             : {
    4964             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x8)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x7), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x26), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x26), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x28)}
    4965             : };
    4966             : 
    4967             : const unsigned short ACTION_BUTTON_INFORMATION_SEGMENTS[] =
    4968             : {
    4969             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0xa704, 0x6000, 0x8000, 0x4000, 0xa704, 0x6000, 0x8000, 0x4000, 0x0009, 0x6001, 0x8000
    4970             : };
    4971             : 
    4972             : const Calculation ACTION_BUTTON_INFORMATION_CALC[] =
    4973             : {
    4974             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, -2060, 0x0406, 1}, {0x6000, 0x0411, 0x0407, 0}, {0x4001, -7620, 0x0406, 1}, {0x6000, 0x0413, 0x0408, 0}, {0x4001, 2060, 0x0406, 1}, {0x6000, 0x0415, 0x0407, 0}, {0x4001, -3500, 0x0406, 1}, {0x6000, 0x0417, 0x0408, 0}, {0x4001, -2960, 0x0406, 1}, {0x6000, 0x0419, 0x0407, 0}, {0x4001, -2960, 0x0406, 1}, {0x6000, 0x041b, 0x0408, 0}, {0x4001, 1480, 0x0406, 1}, {0x6000, 0x041d, 0x0407, 0}, {0x4001, 5080, 0x0406, 1}, {0x6000, 0x041f, 0x0408, 0}, {0x4001, 2960, 0x0406, 1}, {0x6000, 0x0421, 0x0407, 0}, {0x4001, 6140, 0x0406, 1}, {0x6000, 0x0423, 0x0408, 0}, {0x4001, -1480, 0x0406, 1}, {0x6000, 0x0425, 0x0407, 0}, {0x4001, -1920, 0x0406, 1}, {0x6000, 0x0427, 0x0408, 0}, {0x4001, -5560, 0x0406, 1}, {0x6000, 0x0429, 0x0408, 0}
    4975             : };
    4976             : 
    4977             : const TextRectangle ACTION_BUTTON_INFORMATION_TRS[] =
    4978             : {
    4979             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    4980             : };
    4981             : 
    4982             : const int ACTION_BUTTON_INFORMATION_DEFAULT_ADJUST[] =
    4983             : {
    4984             :   1400
    4985             : };
    4986             : 
    4987           0 : const CustomShape CS_ACTION_BUTTON_INFORMATION(
    4988             :   ACTION_BUTTON_INFORMATION_VERTICES, sizeof(ACTION_BUTTON_INFORMATION_VERTICES) / sizeof(Vertex),
    4989             :   ACTION_BUTTON_INFORMATION_SEGMENTS, sizeof(ACTION_BUTTON_INFORMATION_SEGMENTS) / sizeof(unsigned short),
    4990             :   ACTION_BUTTON_INFORMATION_CALC, sizeof(ACTION_BUTTON_INFORMATION_CALC) / sizeof(Calculation),
    4991             :   ACTION_BUTTON_INFORMATION_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_INFORMATION_DEFAULT_ADJUST) / sizeof(int),
    4992             :   ACTION_BUTTON_INFORMATION_TRS, sizeof(ACTION_BUTTON_INFORMATION_TRS) / sizeof(TextRectangle),
    4993             :   21600, 21600,
    4994             :   NULL, 0);
    4995             : 
    4996             : const Vertex ACTION_BUTTON_FORWARD_NEXT_VERTICES[] =
    4997             : {
    4998             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x10)}
    4999             : };
    5000             : 
    5001             : const unsigned short ACTION_BUTTON_FORWARD_NEXT_SEGMENTS[] =
    5002             : {
    5003             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000
    5004             : };
    5005             : 
    5006             : const Calculation ACTION_BUTTON_FORWARD_NEXT_CALC[] =
    5007             : {
    5008             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}
    5009             : };
    5010             : 
    5011             : const TextRectangle ACTION_BUTTON_FORWARD_NEXT_TRS[] =
    5012             : {
    5013             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5014             : };
    5015             : 
    5016             : const int ACTION_BUTTON_FORWARD_NEXT_DEFAULT_ADJUST[] =
    5017             : {
    5018             :   1400
    5019             : };
    5020             : 
    5021           0 : const CustomShape CS_ACTION_BUTTON_FORWARD_NEXT(
    5022             :   ACTION_BUTTON_FORWARD_NEXT_VERTICES, sizeof(ACTION_BUTTON_FORWARD_NEXT_VERTICES) / sizeof(Vertex),
    5023             :   ACTION_BUTTON_FORWARD_NEXT_SEGMENTS, sizeof(ACTION_BUTTON_FORWARD_NEXT_SEGMENTS) / sizeof(unsigned short),
    5024             :   ACTION_BUTTON_FORWARD_NEXT_CALC, sizeof(ACTION_BUTTON_FORWARD_NEXT_CALC) / sizeof(Calculation),
    5025             :   ACTION_BUTTON_FORWARD_NEXT_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_FORWARD_NEXT_DEFAULT_ADJUST) / sizeof(int),
    5026             :   ACTION_BUTTON_FORWARD_NEXT_TRS, sizeof(ACTION_BUTTON_FORWARD_NEXT_TRS) / sizeof(TextRectangle),
    5027             :   21600, 21600,
    5028             :   NULL, 0);
    5029             : 
    5030             : const Vertex ACTION_BUTTON_BACK_PREVIOUS_VERTICES[] =
    5031             : {
    5032             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x10)}
    5033             : };
    5034             : 
    5035             : const unsigned short ACTION_BUTTON_BACK_PREVIOUS_SEGMENTS[] =
    5036             : {
    5037             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000
    5038             : };
    5039             : 
    5040             : const Calculation ACTION_BUTTON_BACK_PREVIOUS_CALC[] =
    5041             : {
    5042             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}
    5043             : };
    5044             : 
    5045             : const TextRectangle ACTION_BUTTON_BACK_PREVIOUS_TRS[] =
    5046             : {
    5047             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5048             : };
    5049             : 
    5050             : const int ACTION_BUTTON_BACK_PREVIOUS_DEFAULT_ADJUST[] =
    5051             : {
    5052             :   1400
    5053             : };
    5054             : 
    5055           0 : const CustomShape CS_ACTION_BUTTON_BACK_PREVIOUS(
    5056             :   ACTION_BUTTON_BACK_PREVIOUS_VERTICES, sizeof(ACTION_BUTTON_BACK_PREVIOUS_VERTICES) / sizeof(Vertex),
    5057             :   ACTION_BUTTON_BACK_PREVIOUS_SEGMENTS, sizeof(ACTION_BUTTON_BACK_PREVIOUS_SEGMENTS) / sizeof(unsigned short),
    5058             :   ACTION_BUTTON_BACK_PREVIOUS_CALC, sizeof(ACTION_BUTTON_BACK_PREVIOUS_CALC) / sizeof(Calculation),
    5059             :   ACTION_BUTTON_BACK_PREVIOUS_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_BACK_PREVIOUS_DEFAULT_ADJUST) / sizeof(int),
    5060             :   ACTION_BUTTON_BACK_PREVIOUS_TRS, sizeof(ACTION_BUTTON_BACK_PREVIOUS_TRS) / sizeof(TextRectangle),
    5061             :   21600, 21600,
    5062             :   NULL, 0);
    5063             : 
    5064             : const Vertex ACTION_BUTTON_END_VERTICES[] =
    5065             : {
    5066             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}
    5067             : };
    5068             : 
    5069             : const unsigned short ACTION_BUTTON_END_SEGMENTS[] =
    5070             : {
    5071             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
    5072             : };
    5073             : 
    5074             : const Calculation ACTION_BUTTON_END_CALC[] =
    5075             : {
    5076             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -4020, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0411, 0x0407, 0}, {0x4001, -6140, 0x0406, 1}, {0x6000, 0x0413, 0x0407, 0}, {0x4001, 4020, 0x0406, 1}, {0x6000, 0x0415, 0x0407, 0}, {0x4001, 6140, 0x0406, 1}, {0x6000, 0x0417, 0x0407, 0}
    5077             : };
    5078             : 
    5079             : const TextRectangle ACTION_BUTTON_END_TRS[] =
    5080             : {
    5081             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5082             : };
    5083             : 
    5084             : const int ACTION_BUTTON_END_DEFAULT_ADJUST[] =
    5085             : {
    5086             :   1400
    5087             : };
    5088             : 
    5089           0 : const CustomShape CS_ACTION_BUTTON_END(
    5090             :   ACTION_BUTTON_END_VERTICES, sizeof(ACTION_BUTTON_END_VERTICES) / sizeof(Vertex),
    5091             :   ACTION_BUTTON_END_SEGMENTS, sizeof(ACTION_BUTTON_END_SEGMENTS) / sizeof(unsigned short),
    5092             :   ACTION_BUTTON_END_CALC, sizeof(ACTION_BUTTON_END_CALC) / sizeof(Calculation),
    5093             :   ACTION_BUTTON_END_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_END_DEFAULT_ADJUST) / sizeof(int),
    5094             :   ACTION_BUTTON_END_TRS, sizeof(ACTION_BUTTON_END_TRS) / sizeof(TextRectangle),
    5095             :   21600, 21600,
    5096             :   NULL, 0);
    5097             : 
    5098             : const Vertex ACTION_BUTTON_BEGINNING_VERTICES[] =
    5099             : {
    5100             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x12), CALCULATED_VALUE(0x10)}
    5101             : };
    5102             : 
    5103             : const unsigned short ACTION_BUTTON_BEGINNING_SEGMENTS[] =
    5104             : {
    5105             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000
    5106             : };
    5107             : 
    5108             : const Calculation ACTION_BUTTON_BEGINNING_CALC[] =
    5109             : {
    5110             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -4020, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0411, 0x0407, 0}, {0x4001, -6140, 0x0406, 1}, {0x6000, 0x0413, 0x0407, 0}, {0x4001, 4020, 0x0406, 1}, {0x6000, 0x0415, 0x0407, 0}, {0x4001, 6140, 0x0406, 1}, {0x6000, 0x0417, 0x0407, 0}
    5111             : };
    5112             : 
    5113             : const TextRectangle ACTION_BUTTON_BEGINNING_TRS[] =
    5114             : {
    5115             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5116             : };
    5117             : 
    5118             : const int ACTION_BUTTON_BEGINNING_DEFAULT_ADJUST[] =
    5119             : {
    5120             :   1400
    5121             : };
    5122             : 
    5123           0 : const CustomShape CS_ACTION_BUTTON_BEGINNING(
    5124             :   ACTION_BUTTON_BEGINNING_VERTICES, sizeof(ACTION_BUTTON_BEGINNING_VERTICES) / sizeof(Vertex),
    5125             :   ACTION_BUTTON_BEGINNING_SEGMENTS, sizeof(ACTION_BUTTON_BEGINNING_SEGMENTS) / sizeof(unsigned short),
    5126             :   ACTION_BUTTON_BEGINNING_CALC, sizeof(ACTION_BUTTON_BEGINNING_CALC) / sizeof(Calculation),
    5127             :   ACTION_BUTTON_BEGINNING_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_BEGINNING_DEFAULT_ADJUST) / sizeof(int),
    5128             :   ACTION_BUTTON_BEGINNING_TRS, sizeof(ACTION_BUTTON_BEGINNING_TRS) / sizeof(TextRectangle),
    5129             :   21600, 21600,
    5130             :   NULL, 0);
    5131             : 
    5132             : const Vertex ACTION_BUTTON_RETURN_VERTICES[] =
    5133             : {
    5134             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x20)}, {CALCULATED_VALUE(0x22), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x24), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x24), CALCULATED_VALUE(0x10)}, {CALCULATED_VALUE(0x24), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x28), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(7), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0x2c), CALCULATED_VALUE(0x2a)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x10)}
    5135             : };
    5136             : 
    5137             : const unsigned short ACTION_BUTTON_RETURN_SEGMENTS[] =
    5138             : {
    5139             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0002, 0x2001, 0x0001, 0x2001, 0x0006, 0x2001, 0x0001, 0x2001, 0x6001, 0x8000
    5140             : };
    5141             : 
    5142             : const Calculation ACTION_BUTTON_RETURN_CALC[] =
    5143             : {
    5144             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -3800, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, -4020, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 2330, 0x0406, 1}, {0x6000, 0x040f, 0x0408, 0}, {0x4001, 3390, 0x0406, 1}, {0x6000, 0x0411, 0x0408, 0}, {0x4001, -3100, 0x0406, 1}, {0x6000, 0x0413, 0x0407, 0}, {0x4001, 4230, 0x0406, 1}, {0x6000, 0x0415, 0x0408, 0}, {0x4001, -1910, 0x0406, 1}, {0x6000, 0x0417, 0x0407, 0}, {0x4001, 1190, 0x0406, 1}, {0x6000, 0x0419, 0x0407, 0}, {0x4001, 2110, 0x0406, 1}, {0x6000, 0x041b, 0x0407, 0}, {0x4001, 4030, 0x0406, 1}, {0x6000, 0x041d, 0x0407, 0}, {0x4001, -7830, 0x0406, 1}, {0x6000, 0x041f, 0x0408, 0}, {0x4001, 8250, 0x0406, 1}, {0x6000, 0x0421, 0x0407, 0}, {0x4001, 6140, 0x0406, 1}, {0x6000, 0x0423, 0x0407, 0}, {0x4001, 5510, 0x0406, 1}, {0x6000, 0x0425, 0x0408, 0}, {0x4001, 3180, 0x0406, 1}, {0x6000, 0x0427, 0x0407, 0}, {0x4001, 8450, 0x0406, 1}, {0x6000, 0x0429, 0x0408, 0}, {0x4001, -5090, 0x0406, 1}, {0x6000, 0x042b, 0x0407, 0}
    5145             : };
    5146             : 
    5147             : const TextRectangle ACTION_BUTTON_RETURN_TRS[] =
    5148             : {
    5149             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5150             : };
    5151             : 
    5152             : const int ACTION_BUTTON_RETURN_DEFAULT_ADJUST[] =
    5153             : {
    5154             :   1400
    5155             : };
    5156             : 
    5157           0 : const CustomShape CS_ACTION_BUTTON_RETURN(
    5158             :   ACTION_BUTTON_RETURN_VERTICES, sizeof(ACTION_BUTTON_RETURN_VERTICES) / sizeof(Vertex),
    5159             :   ACTION_BUTTON_RETURN_SEGMENTS, sizeof(ACTION_BUTTON_RETURN_SEGMENTS) / sizeof(unsigned short),
    5160             :   ACTION_BUTTON_RETURN_CALC, sizeof(ACTION_BUTTON_RETURN_CALC) / sizeof(Calculation),
    5161             :   ACTION_BUTTON_RETURN_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_RETURN_DEFAULT_ADJUST) / sizeof(int),
    5162             :   ACTION_BUTTON_RETURN_TRS, sizeof(ACTION_BUTTON_RETURN_TRS) / sizeof(TextRectangle),
    5163             :   21600, 21600,
    5164             :   NULL, 0);
    5165             : 
    5166             : const Vertex ACTION_BUTTON_DOCUMENT_VERTICES[] =
    5167             : {
    5168             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x12)}
    5169             : };
    5170             : 
    5171             : const unsigned short ACTION_BUTTON_DOCUMENT_SEGMENTS[] =
    5172             : {
    5173             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0004, 0x6001, 0x8000, 0x4000, 0x0002, 0x6001, 0x8000
    5174             : };
    5175             : 
    5176             : const Calculation ACTION_BUTTON_DOCUMENT_CALC[] =
    5177             : {
    5178             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -6350, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -7830, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, 1690, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 6350, 0x0406, 1}, {0x6000, 0x040f, 0x0407, 0}, {0x4001, -3810, 0x0406, 1}, {0x6000, 0x0411, 0x0408, 0}, {0x4001, 7830, 0x0406, 1}, {0x6000, 0x0413, 0x0408, 0}
    5179             : };
    5180             : 
    5181             : const TextRectangle ACTION_BUTTON_DOCUMENT_TRS[] =
    5182             : {
    5183             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5184             : };
    5185             : 
    5186             : const int ACTION_BUTTON_DOCUMENT_DEFAULT_ADJUST[] =
    5187             : {
    5188             :   1400
    5189             : };
    5190             : 
    5191           0 : const CustomShape CS_ACTION_BUTTON_DOCUMENT(
    5192             :   ACTION_BUTTON_DOCUMENT_VERTICES, sizeof(ACTION_BUTTON_DOCUMENT_VERTICES) / sizeof(Vertex),
    5193             :   ACTION_BUTTON_DOCUMENT_SEGMENTS, sizeof(ACTION_BUTTON_DOCUMENT_SEGMENTS) / sizeof(unsigned short),
    5194             :   ACTION_BUTTON_DOCUMENT_CALC, sizeof(ACTION_BUTTON_DOCUMENT_CALC) / sizeof(Calculation),
    5195             :   ACTION_BUTTON_DOCUMENT_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_DOCUMENT_DEFAULT_ADJUST) / sizeof(int),
    5196             :   ACTION_BUTTON_DOCUMENT_TRS, sizeof(ACTION_BUTTON_DOCUMENT_TRS) / sizeof(TextRectangle),
    5197             :   21600, 21600,
    5198             :   NULL, 0);
    5199             : 
    5200             : const Vertex ACTION_BUTTON_SOUND_VERTICES[] =
    5201             : {
    5202             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x14)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(8)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x1c)}, {CALCULATED_VALUE(0x18), CALCULATED_VALUE(0x16)}, {CALCULATED_VALUE(0x1a), CALCULATED_VALUE(0x1e)}
    5203             : };
    5204             : 
    5205             : const unsigned short ACTION_BUTTON_SOUND_SEGMENTS[] =
    5206             : {
    5207             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0005, 0x6001, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000, 0x4000, 0x0001, 0x8000
    5208             : };
    5209             : 
    5210             : const Calculation ACTION_BUTTON_SOUND_CALC[] =
    5211             : {
    5212             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -2750, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, -2960, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, 2120, 0x0406, 1}, {0x6000, 0x040f, 0x0407, 0}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0411, 0x0408, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x0413, 0x0408, 0}, {0x4001, 2750, 0x0406, 1}, {0x6000, 0x0415, 0x0408, 0}, {0x4001, 4020, 0x0406, 1}, {0x6000, 0x0417, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x0419, 0x0407, 0}, {0x4001, -5930, 0x0406, 1}, {0x6000, 0x041b, 0x0408, 0}, {0x4001, 5930, 0x0406, 1}, {0x6000, 0x041d, 0x0408, 0}
    5213             : };
    5214             : 
    5215             : const TextRectangle ACTION_BUTTON_SOUND_TRS[] =
    5216             : {
    5217             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5218             : };
    5219             : 
    5220             : const int ACTION_BUTTON_SOUND_DEFAULT_ADJUST[] =
    5221             : {
    5222             :   1400
    5223             : };
    5224             : 
    5225           0 : const CustomShape CS_ACTION_BUTTON_SOUND(
    5226             :   ACTION_BUTTON_SOUND_VERTICES, sizeof(ACTION_BUTTON_SOUND_VERTICES) / sizeof(Vertex),
    5227             :   ACTION_BUTTON_SOUND_SEGMENTS, sizeof(ACTION_BUTTON_SOUND_SEGMENTS) / sizeof(unsigned short),
    5228             :   ACTION_BUTTON_SOUND_CALC, sizeof(ACTION_BUTTON_SOUND_CALC) / sizeof(Calculation),
    5229             :   ACTION_BUTTON_SOUND_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_SOUND_DEFAULT_ADJUST) / sizeof(int),
    5230             :   ACTION_BUTTON_SOUND_TRS, sizeof(ACTION_BUTTON_SOUND_TRS) / sizeof(TextRectangle),
    5231             :   21600, 21600,
    5232             :   NULL, 0);
    5233             : 
    5234             : const Vertex ACTION_BUTTON_MOVIE_VERTICES[] =
    5235             : {
    5236             :   {0, 0}, {21600, 0}, {21600, 21600}, {0, 21600}, {0, 0}, {21600, 0}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {21600, 0}, {21600, 21600}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(2)}, {21600, 21600}, {0, 21600}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)}, {0, 21600}, {0, 0}, {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(1), CALCULATED_VALUE(4)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0xc)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x14), CALCULATED_VALUE(0x12)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x1a)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x18)}, {CALCULATED_VALUE(0x20), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x1e), CALCULATED_VALUE(0x22)}, {CALCULATED_VALUE(0x1c), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x24)}, {CALCULATED_VALUE(0x16), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x2a), CALCULATED_VALUE(0x26)}, {CALCULATED_VALUE(0x2a), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0x10), CALCULATED_VALUE(0x28)}, {CALCULATED_VALUE(0xe), CALCULATED_VALUE(0x2c)}, {CALCULATED_VALUE(0xa), CALCULATED_VALUE(0x2c)}
    5237             : };
    5238             : 
    5239             : const unsigned short ACTION_BUTTON_MOVIE_SEGMENTS[] =
    5240             : {
    5241             :   0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0003, 0x6001, 0x8000, 0x4000, 0x0012, 0x6001, 0x8000
    5242             : };
    5243             : 
    5244             : const Calculation ACTION_BUTTON_MOVIE_CALC[] =
    5245             : {
    5246             :   {0x2000, PROP_ADJUST_VAL_FIRST, 0, 0}, {0x6000, PROP_GEO_LEFT, PROP_ADJUST_VAL_FIRST, 0}, {0x6000, PROP_GEO_TOP, PROP_ADJUST_VAL_FIRST, 0}, {0xa000, PROP_GEO_RIGHT, 0, PROP_ADJUST_VAL_FIRST}, {0xa000, PROP_GEO_BOTTOM, 0, PROP_ADJUST_VAL_FIRST}, {0x8000, 10800, 0, PROP_ADJUST_VAL_FIRST}, {0x2001, 0x0405, 1, 10800}, {0x2001, PROP_GEO_RIGHT, 1, 2}, {0x2001, PROP_GEO_BOTTOM, 1, 2}, {0x4001, -8050, 0x0406, 1}, {0x6000, 0x0409, 0x0407, 0}, {0x4001, -4020, 0x0406, 1}, {0x6000, 0x040b, 0x0408, 0}, {0x4001, -7000, 0x0406, 1}, {0x6000, 0x040d, 0x0407, 0}, {0x4001, -6560, 0x0406, 1}, {0x6000, 0x040f, 0x0407, 0}, {0x4001, -3600, 0x0406, 1}, {0x6000, 0x0411, 0x0408, 0}, {0x4001, 4020, 0x0406, 1}, {0x6000, 0x0413, 0x0407, 0}, {0x4001, 4660, 0x0406, 1}, {0x6000, 0x0415, 0x0407, 0}, {0x4001, -2960, 0x0406, 1}, {0x6000, 0x0417, 0x0408, 0}, {0x4001, -2330, 0x0406, 1}, {0x6000, 0x0419, 0x0408, 0}, {0x4001, 6780, 0x0406, 1}, {0x6000, 0x041b, 0x0407, 0}, {0x4001, 7200, 0x0406, 1}, {0x6000, 0x041d, 0x0407, 0}, {0x4001, 8050, 0x0406, 1}, {0x6000, 0x041f, 0x0407, 0}, {0x4001, 2960, 0x0406, 1}, {0x6000, 0x0421, 0x0408, 0}, {0x4001, 2330, 0x0406, 1}, {0x6000, 0x0423, 0x0408, 0}, {0x4001, 3800, 0x0406, 1}, {0x6000, 0x0425, 0x0408, 0}, {0x4001, -1060, 0x0406, 1}, {0x6000, 0x0427, 0x0408, 0}, {0x4001, -6350, 0x0406, 1}, {0x6000, 0x0429, 0x0407, 0}, {0x4001, -640, 0x0406, 1}, {0x6000, 0x042b, 0x0408, 0}
    5247             : };
    5248             : 
    5249             : const TextRectangle ACTION_BUTTON_MOVIE_TRS[] =
    5250             : {
    5251             :   { {CALCULATED_VALUE(1), CALCULATED_VALUE(2)}, {CALCULATED_VALUE(3), CALCULATED_VALUE(4)} }
    5252             : };
    5253             : 
    5254             : const int ACTION_BUTTON_MOVIE_DEFAULT_ADJUST[] =
    5255             : {
    5256             :   1400
    5257             : };
    5258             : 
    5259           0 : const CustomShape CS_ACTION_BUTTON_MOVIE(
    5260             :   ACTION_BUTTON_MOVIE_VERTICES, sizeof(ACTION_BUTTON_MOVIE_VERTICES) / sizeof(Vertex),
    5261             :   ACTION_BUTTON_MOVIE_SEGMENTS, sizeof(ACTION_BUTTON_MOVIE_SEGMENTS) / sizeof(unsigned short),
    5262             :   ACTION_BUTTON_MOVIE_CALC, sizeof(ACTION_BUTTON_MOVIE_CALC) / sizeof(Calculation),
    5263             :   ACTION_BUTTON_MOVIE_DEFAULT_ADJUST, sizeof(ACTION_BUTTON_MOVIE_DEFAULT_ADJUST) / sizeof(int),
    5264             :   ACTION_BUTTON_MOVIE_TRS, sizeof(ACTION_BUTTON_MOVIE_TRS) / sizeof(TextRectangle),
    5265             :   21600, 21600,
    5266             :   NULL, 0);
    5267             : 
    5268           0 : const CustomShape *libmspub::getCustomShape(ShapeType type)
    5269             : {
    5270           0 :   switch(type)
    5271             :   {
    5272             :   case RECTANGLE:
    5273           0 :     return &CS_RECTANGLE;
    5274             :   case ELLIPSE:
    5275           0 :     return &CS_ELLIPSE;
    5276             :   case ISOCELES_TRIANGLE:
    5277           0 :     return &CS_ISOCELES_TRIANGLE;
    5278             :   case SEAL_4:
    5279           0 :     return &CS_SEAL_4;
    5280             :   case PARALLELOGRAM:
    5281           0 :     return &CS_PARALLELOGRAM;
    5282             :   case RIGHT_TRIANGLE:
    5283           0 :     return &CS_RIGHT_TRIANGLE;
    5284             :   case DIAMOND:
    5285           0 :     return &CS_DIAMOND;
    5286             :   case TRAPEZOID:
    5287           0 :     return &CS_TRAPEZOID;
    5288             :   case HEXAGON:
    5289           0 :     return &CS_HEXAGON;
    5290             :   case STAR:
    5291           0 :     return &CS_STAR;
    5292             :   case PLUS:
    5293           0 :     return &CS_PLUS;
    5294             :   case ROUND_RECTANGLE:
    5295           0 :     return &CS_ROUND_RECTANGLE;
    5296             :   case OCTAGON:
    5297           0 :     return &CS_OCTAGON;
    5298             :   case ARROW:
    5299           0 :     return &CS_ARROW;
    5300             :   case HOME_PLATE:
    5301           0 :     return &CS_HOME_PLATE;
    5302             :   case CUBE:
    5303           0 :     return &CS_CUBE;
    5304             :   case BALLOON:
    5305           0 :     return &CS_BALLOON;
    5306             :   case ARC_SHAPE:
    5307           0 :     return &CS_ARC;
    5308             :   case PLAQUE:
    5309           0 :     return &CS_PLAQUE;
    5310             :   case CAN:
    5311           0 :     return &CS_CAN;
    5312             :   case DONUT:
    5313           0 :     return &CS_DONUT;
    5314             :   case TEXT_BOX:
    5315             :   case TEXT_SIMPLE:
    5316           0 :     return &CS_TEXT_SIMPLE;
    5317             :   case STRAIGHT_CONNECTOR_1:
    5318           0 :     return &CS_STRAIGHT_CONNECTOR_1;
    5319             :   case BENT_CONNECTOR_2:
    5320           0 :     return &CS_BENT_CONNECTOR_2;
    5321             :   case BENT_CONNECTOR_3:
    5322           0 :     return &CS_BENT_CONNECTOR_3;
    5323             :   case BENT_CONNECTOR_4:
    5324           0 :     return &CS_BENT_CONNECTOR_4;
    5325             :   case BENT_CONNECTOR_5:
    5326           0 :     return &CS_BENT_CONNECTOR_5;
    5327             :   case CURVED_CONNECTOR_2:
    5328           0 :     return &CS_CURVED_CONNECTOR_2;
    5329             :   case CURVED_CONNECTOR_3:
    5330           0 :     return &CS_CURVED_CONNECTOR_3;
    5331             :   case CURVED_CONNECTOR_4:
    5332           0 :     return &CS_CURVED_CONNECTOR_4;
    5333             :   case CURVED_CONNECTOR_5:
    5334           0 :     return &CS_CURVED_CONNECTOR_5;
    5335             :   case CALLOUT_1:
    5336           0 :     return &CS_CALLOUT_1;
    5337             :   case CALLOUT_2:
    5338           0 :     return &CS_CALLOUT_2;
    5339             :   case CALLOUT_3:
    5340           0 :     return &CS_CALLOUT_3;
    5341             :   case RIBBON:
    5342           0 :     return &CS_RIBBON;
    5343             :   case RIBBON_2:
    5344           0 :     return &CS_RIBBON_2;
    5345             :   case CHEVRON:
    5346           0 :     return &CS_CHEVRON;
    5347             :   case PENTAGON:
    5348           0 :     return &CS_PENTAGON;
    5349             :   case NO_SMOKING:
    5350           0 :     return &CS_NO_SMOKING;
    5351             :   case SEAL_8:
    5352           0 :     return &CS_SEAL_8;
    5353             :   case SEAL_16:
    5354           0 :     return &CS_SEAL_16;
    5355             :   case SEAL_32:
    5356           0 :     return &CS_SEAL_32;
    5357             :   case WAVE:
    5358           0 :     return &CS_WAVE;
    5359             :   case LINE:
    5360           0 :     return &CS_LINE;
    5361             :   case FOLDED_CORNER:
    5362           0 :     return &CS_FOLDED_CORNER;
    5363             :   case LEFT_ARROW:
    5364           0 :     return &CS_LEFT_ARROW;
    5365             :   case DOWN_ARROW:
    5366           0 :     return &CS_DOWN_ARROW;
    5367             :   case UP_ARROW:
    5368           0 :     return &CS_UP_ARROW;
    5369             :   case LEFT_RIGHT_ARROW:
    5370           0 :     return &CS_LEFT_RIGHT_ARROW;
    5371             :   case UP_DOWN_ARROW:
    5372           0 :     return &CS_UP_DOWN_ARROW;
    5373             :   case IRREGULAR_SEAL_1:
    5374           0 :     return &CS_IRREGULAR_SEAL_1;
    5375             :   case IRREGULAR_SEAL_2:
    5376           0 :     return &CS_IRREGULAR_SEAL_2;
    5377             :   case LIGHTNING_BOLT:
    5378           0 :     return &CS_LIGHTNING_BOLT;
    5379             :   case HEART:
    5380           0 :     return &CS_HEART;
    5381             :   case PICTURE_FRAME:
    5382           0 :     return NULL; //FIXME
    5383             :   case QUAD_ARROW:
    5384           0 :     return &CS_QUAD_ARROW;
    5385             :   case BEVEL:
    5386           0 :     return &CS_BEVEL;
    5387             :   case LEFT_BRACKET:
    5388           0 :     return &CS_LEFT_BRACKET;
    5389             :   case RIGHT_BRACKET:
    5390           0 :     return &CS_RIGHT_BRACKET;
    5391             :   case LEFT_BRACE:
    5392           0 :     return &CS_LEFT_BRACE;
    5393             :   case RIGHT_BRACE:
    5394           0 :     return &CS_RIGHT_BRACE;
    5395             :   case LEFT_UP_ARROW:
    5396           0 :     return &CS_LEFT_UP_ARROW;
    5397             :   case BENT_UP_ARROW:
    5398           0 :     return &CS_BENT_UP_ARROW;
    5399             :   case BENT_ARROW:
    5400           0 :     return &CS_BENT_ARROW;
    5401             :   case SEAL_24:
    5402           0 :     return &CS_SEAL_24;
    5403             :   case STRIPED_RIGHT_ARROW:
    5404           0 :     return &CS_STRIPED_RIGHT_ARROW;
    5405             :   case NOTCHED_RIGHT_ARROW:
    5406           0 :     return &CS_NOTCHED_RIGHT_ARROW;
    5407             :   case BLOCK_ARC:
    5408           0 :     return &CS_BLOCK_ARC;
    5409             :   case SMILEY_FACE:
    5410           0 :     return &CS_SMILEY_FACE;
    5411             :   case VERTICAL_SCROLL:
    5412           0 :     return &CS_VERTICAL_SCROLL;
    5413             :   case HORIZONTAL_SCROLL:
    5414           0 :     return &CS_HORIZONTAL_SCROLL;
    5415             :   case CIRCULAR_ARROW:
    5416           0 :     return &CS_CIRCULAR_ARROW;
    5417             :   case U_TURN_ARROW:
    5418           0 :     return &CS_U_TURN_ARROW;
    5419             :   case CURVED_RIGHT_ARROW:
    5420           0 :     return &CS_CURVED_RIGHT_ARROW;
    5421             :   case CURVED_LEFT_ARROW:
    5422           0 :     return &CS_CURVED_LEFT_ARROW;
    5423             :   case CURVED_UP_ARROW:
    5424           0 :     return &CS_CURVED_UP_ARROW;
    5425             :   case CURVED_DOWN_ARROW:
    5426           0 :     return &CS_CURVED_DOWN_ARROW;
    5427             :   case FLOW_CHART_PROCESS:
    5428           0 :     return &CS_FLOW_CHART_PROCESS;
    5429             :   case FLOW_CHART_DECISION:
    5430           0 :     return &CS_FLOW_CHART_DECISION;
    5431             :   case FLOW_CHART_IO:
    5432           0 :     return &CS_FLOW_CHART_IO;
    5433             :   case FLOW_CHART_PREDEFINED_PROCESS:
    5434           0 :     return &CS_FLOW_CHART_PREDEFINED_PROCESS;
    5435             :   case FLOW_CHART_INTERNAL_STORAGE:
    5436           0 :     return &CS_FLOW_CHART_INTERNAL_STORAGE;
    5437             :   case FLOW_CHART_DOCUMENT:
    5438           0 :     return &CS_FLOW_CHART_DOCUMENT;
    5439             :   case FLOW_CHART_MULTI_DOCUMENT:
    5440           0 :     return &CS_FLOW_CHART_MULTI_DOCUMENT;
    5441             :   case FLOW_CHART_TERMINATOR:
    5442           0 :     return &CS_FLOW_CHART_TERMINATOR;
    5443             :   case FLOW_CHART_PREPARATION:
    5444           0 :     return &CS_FLOW_CHART_PREPARATION;
    5445             :   case FLOW_CHART_MANUAL_INPUT:
    5446           0 :     return &CS_FLOW_CHART_MANUAL_INPUT;
    5447             :   case FLOW_CHART_MANUAL_OPERATION:
    5448           0 :     return &CS_FLOW_CHART_MANUAL_OPERATION;
    5449             :   case FLOW_CHART_CONNECTOR:
    5450           0 :     return &CS_FLOW_CHART_CONNECTOR;
    5451             :   case FLOW_CHART_PUNCHED_CARD:
    5452           0 :     return &CS_FLOW_CHART_PUNCHED_CARD;
    5453             :   case FLOW_CHART_PUNCHED_TAPE:
    5454           0 :     return &CS_FLOW_CHART_PUNCHED_TAPE;
    5455             :   case FLOW_CHART_SUMMING_JUNCTION:
    5456           0 :     return &CS_FLOW_CHART_SUMMING_JUNCTION;
    5457             :   case FLOW_CHART_OR:
    5458           0 :     return &CS_FLOW_CHART_OR;
    5459             :   case FLOW_CHART_COLLATE:
    5460           0 :     return &CS_FLOW_CHART_COLLATE;
    5461             :   case FLOW_CHART_SORT:
    5462           0 :     return &CS_FLOW_CHART_SORT;
    5463             :   case FLOW_CHART_EXTRACT:
    5464           0 :     return &CS_FLOW_CHART_EXTRACT;
    5465             :   case FLOW_CHART_MERGE:
    5466           0 :     return &CS_FLOW_CHART_MERGE;
    5467             :   case FLOW_CHART_ONLINE_STORAGE:
    5468           0 :     return &CS_FLOW_CHART_ONLINE_STORAGE;
    5469             :   case FLOW_CHART_MAGNETIC_TAPE:
    5470           0 :     return &CS_FLOW_CHART_MAGNETIC_TAPE;
    5471             :   case FLOW_CHART_MAGNETIC_DISK:
    5472           0 :     return &CS_FLOW_CHART_MAGNETIC_DISK;
    5473             :   case FLOW_CHART_MAGNETIC_DRUM:
    5474           0 :     return &CS_FLOW_CHART_MAGNETIC_DRUM;
    5475             :   case FLOW_CHART_DISPLAY:
    5476           0 :     return &CS_FLOW_CHART_DISPLAY;
    5477             :   case FLOW_CHART_DELAY:
    5478           0 :     return &CS_FLOW_CHART_DELAY;
    5479             :   case TEXT_PLAIN_TEXT:
    5480           0 :     return &CS_TEXT_PLAIN_TEXT;
    5481             :   case TEXT_STOP:
    5482           0 :     return &CS_TEXT_STOP;
    5483             :   case TEXT_TRIANGLE:
    5484           0 :     return &CS_TEXT_TRIANGLE;
    5485             :   case TEXT_TRIANGLE_INVERTED:
    5486           0 :     return &CS_TEXT_TRIANGLE_INVERTED;
    5487             :   case TEXT_CHEVRON:
    5488           0 :     return &CS_TEXT_CHEVRON;
    5489             :   case TEXT_CHEVRON_INVERTED:
    5490           0 :     return &CS_TEXT_CHEVRON_INVERTED;
    5491             :   case TEXT_RING_OUTSIDE:
    5492           0 :     return &CS_TEXT_RING_OUTSIDE;
    5493             :   case TEXT_ARCH_UP_CURVE:
    5494           0 :     return &CS_TEXT_ARCH_UP_CURVE;
    5495             :   case TEXT_ARCH_DOWN_CURVE:
    5496           0 :     return &CS_TEXT_ARCH_DOWN_CURVE;
    5497             :   case TEXT_CIRCLE_CURVE:
    5498           0 :     return &CS_TEXT_CIRCLE_CURVE;
    5499             :   case TEXT_BUTTON_CURVE:
    5500           0 :     return &CS_TEXT_BUTTON_CURVE;
    5501             :   case TEXT_ARCH_UP_POUR:
    5502           0 :     return &CS_TEXT_ARCH_UP_POUR;
    5503             :   case TEXT_ARCH_DOWN_POUR:
    5504           0 :     return &CS_TEXT_ARCH_DOWN_POUR;
    5505             :   case TEXT_CIRCLE_POUR:
    5506           0 :     return &CS_TEXT_CIRCLE_POUR;
    5507             :   case TEXT_BUTTON_POUR:
    5508           0 :     return &CS_TEXT_BUTTON_POUR;
    5509             :   case TEXT_CURVE_UP:
    5510           0 :     return &CS_TEXT_CURVE_UP;
    5511             :   case TEXT_CURVE_DOWN:
    5512           0 :     return &CS_TEXT_CURVE_DOWN;
    5513             :   case TEXT_CASCADE_UP:
    5514           0 :     return &CS_TEXT_CASCADE_UP;
    5515             :   case TEXT_CASCADE_DOWN:
    5516           0 :     return &CS_TEXT_CASCADE_DOWN;
    5517             :   case TEXT_WAVE_1:
    5518           0 :     return &CS_TEXT_WAVE_1;
    5519             :   case TEXT_WAVE_2:
    5520           0 :     return &CS_TEXT_WAVE_2;
    5521             :   case TEXT_WAVE_3:
    5522           0 :     return &CS_TEXT_WAVE_3;
    5523             :   case TEXT_WAVE_4:
    5524           0 :     return &CS_TEXT_WAVE_4;
    5525             :   case TEXT_INFLATE:
    5526           0 :     return &CS_TEXT_INFLATE;
    5527             :   case TEXT_DEFLATE:
    5528           0 :     return &CS_TEXT_DEFLATE;
    5529             :   case TEXT_INFLATE_BOTTOM:
    5530           0 :     return &CS_TEXT_INFLATE_BOTTOM;
    5531             :   case TEXT_DEFLATE_BOTTOM:
    5532           0 :     return &CS_TEXT_DEFLATE_BOTTOM;
    5533             :   case TEXT_INFLATE_TOP:
    5534           0 :     return &CS_TEXT_INFLATE_TOP;
    5535             :   case TEXT_DEFLATE_TOP:
    5536           0 :     return &CS_TEXT_DEFLATE_TOP;
    5537             :   case TEXT_DEFLATE_INFLATE:
    5538           0 :     return &CS_TEXT_DEFLATE_INFLATE;
    5539             :   case TEXT_DEFLATE_INFLATE_DEFLATE: // great name
    5540           0 :     return &CS_TEXT_DEFLATE_INFLATE_DEFLATE;
    5541             :   case TEXT_FADE_RIGHT:
    5542           0 :     return &CS_TEXT_FADE_RIGHT;
    5543             :   case TEXT_FADE_LEFT:
    5544           0 :     return &CS_TEXT_FADE_LEFT;
    5545             :   case TEXT_FADE_UP:
    5546           0 :     return &CS_TEXT_FADE_UP;
    5547             :   case TEXT_FADE_DOWN:
    5548           0 :     return &CS_TEXT_FADE_DOWN;
    5549             :   case TEXT_SLANT_UP:
    5550           0 :     return &CS_TEXT_SLANT_UP;
    5551             :   case TEXT_SLANT_DOWN:
    5552           0 :     return &CS_TEXT_SLANT_DOWN;
    5553             :   case TEXT_CAN_UP:
    5554           0 :     return &CS_TEXT_CAN_UP;
    5555             :   case TEXT_CAN_DOWN:
    5556           0 :     return &CS_TEXT_CAN_DOWN;
    5557             :   case FLOW_CHART_ALTERNATE_PROCESS:
    5558           0 :     return &CS_FLOW_CHART_ALTERNATE_PROCESS;
    5559             :   case FLOW_CHART_OFFPAGE_CONNECTOR:
    5560           0 :     return &CS_FLOW_CHART_OFFPAGE_CONNECTOR;
    5561             :   case LEFT_RIGHT_UP_ARROW:
    5562           0 :     return &CS_LEFT_RIGHT_UP_ARROW;
    5563             :   case SUN:
    5564           0 :     return &CS_SUN;
    5565             :   case MOON:
    5566           0 :     return &CS_MOON;
    5567             :   case BRACKET_PAIR:
    5568           0 :     return &CS_BRACKET_PAIR;
    5569             :   case BRACE_PAIR:
    5570           0 :     return &CS_BRACE_PAIR;
    5571             :   case DOUBLE_WAVE:
    5572           0 :     return &CS_DOUBLE_WAVE;
    5573             :   case ACTION_BUTTON_BLANK:
    5574           0 :     return &CS_ACTION_BUTTON_BLANK;
    5575             :   case ACTION_BUTTON_HOME:
    5576           0 :     return &CS_ACTION_BUTTON_HOME;
    5577             :   case ACTION_BUTTON_HELP:
    5578           0 :     return &CS_ACTION_BUTTON_HELP;
    5579             :   case ACTION_BUTTON_INFORMATION:
    5580           0 :     return &CS_ACTION_BUTTON_INFORMATION;
    5581             :   case ACTION_BUTTON_FORWARD_NEXT:
    5582           0 :     return &CS_ACTION_BUTTON_FORWARD_NEXT;
    5583             :   case ACTION_BUTTON_BACK_PREVIOUS:
    5584           0 :     return &CS_ACTION_BUTTON_BACK_PREVIOUS;
    5585             :   case ACTION_BUTTON_END:
    5586           0 :     return &CS_ACTION_BUTTON_END;
    5587             :   case ACTION_BUTTON_BEGINNING:
    5588           0 :     return &CS_ACTION_BUTTON_BEGINNING;
    5589             :   case ACTION_BUTTON_RETURN:
    5590           0 :     return &CS_ACTION_BUTTON_RETURN;
    5591             :   case ACTION_BUTTON_DOCUMENT:
    5592           0 :     return &CS_ACTION_BUTTON_DOCUMENT;
    5593             :   case ACTION_BUTTON_SOUND:
    5594           0 :     return &CS_ACTION_BUTTON_SOUND;
    5595             :   case ACTION_BUTTON_MOVIE:
    5596           0 :     return &CS_ACTION_BUTTON_MOVIE;
    5597             :   default:
    5598           0 :     return NULL;
    5599             :   }
    5600             : }
    5601             : 
    5602             : enum Command
    5603             : {
    5604             :   MOVETO,
    5605             :   LINETO,
    5606             :   CURVETO,
    5607             :   NOFILL,
    5608             :   NOSTROKE,
    5609             :   ANGLEELLIPSE,
    5610             :   CLOSESUBPATH,
    5611             :   ARCTO,
    5612             :   ARC,
    5613             :   CLOCKWISEARCTO,
    5614             :   CLOCKWISEARC,
    5615             :   ENDSUBPATH,
    5616             :   ELLIPTICALQUADRANTX,
    5617             :   ELLIPTICALQUADRANTY
    5618             : };
    5619             : 
    5620             : struct ShapeElementCommand
    5621             : {
    5622             :   Command m_command;
    5623             :   unsigned char m_count;
    5624           0 :   ShapeElementCommand(Command command, unsigned char count) : m_command(command), m_count(count) { }
    5625             : };
    5626             : 
    5627           0 : ShapeElementCommand getCommandFromBinary(unsigned short binary)
    5628             : {
    5629             :   Command cmd;
    5630           0 :   unsigned count = 0;
    5631           0 :   switch(binary >> 8)
    5632             :   {
    5633             :   case 0xAA:
    5634           0 :     cmd = NOFILL;
    5635           0 :     break;
    5636             :   case 0xAB:
    5637           0 :     cmd = NOSTROKE;
    5638           0 :     break;
    5639             :   case 0xAD:
    5640             :   case 0xB3:
    5641             :   case 0x20:
    5642             :   case 0xAF:
    5643           0 :     cmd = CURVETO;
    5644           0 :     count = (binary & 0xFF);
    5645           0 :     break;
    5646             :   case 0xA2:
    5647           0 :     cmd = ANGLEELLIPSE;
    5648           0 :     count = (binary & 0xFF) / 3;
    5649           0 :     break;
    5650             :   case 0xA3:
    5651           0 :     cmd = ARCTO;
    5652           0 :     count = (binary & 0xFF) / 4;
    5653           0 :     break;
    5654             :   case 0xA4:
    5655           0 :     cmd = ARC;
    5656           0 :     count = (binary & 0xFF) / 4;
    5657           0 :     break;
    5658             :   case 0xA5:
    5659           0 :     cmd = CLOCKWISEARCTO;
    5660           0 :     count = (binary & 0xFF) / 4;
    5661           0 :     break;
    5662             :   case 0xA6:
    5663           0 :     cmd = CLOCKWISEARC;
    5664           0 :     count = (binary & 0xFF) / 4;
    5665           0 :     break;
    5666             :   case 0xA7:
    5667           0 :     cmd = ELLIPTICALQUADRANTX;
    5668           0 :     count = (binary & 0xFF);
    5669           0 :     break;
    5670             :   case 0xA8:
    5671           0 :     cmd = ELLIPTICALQUADRANTY;
    5672           0 :     count = (binary & 0xFF);
    5673           0 :     break;
    5674             :   case 0xAC:
    5675             :   case 0xAE:
    5676             :   case 0x0:
    5677           0 :     cmd = LINETO;
    5678           0 :     count = (binary & 0xFF);
    5679           0 :     break;
    5680             :   case 0x40:
    5681           0 :     cmd = MOVETO;
    5682           0 :     count = (binary & 0xFF);
    5683           0 :     count = count ? count : 1;
    5684           0 :     break;
    5685             :   case 0x60:
    5686           0 :     cmd = CLOSESUBPATH;
    5687           0 :     break;
    5688             :   case 0x80:
    5689           0 :     cmd = ENDSUBPATH;
    5690           0 :     break;
    5691             :   default:
    5692             :     MSPUB_DEBUG_MSG(("unknown segment command 0x%x\n", binary >> 8));
    5693           0 :     cmd = MOVETO;
    5694           0 :     count = 1;
    5695           0 :     break;
    5696             :   }
    5697           0 :   return ShapeElementCommand(cmd, count);
    5698             : }
    5699             : 
    5700           0 : double getSpecialIfNecessary(boost::function<double (unsigned index)> calculator, int val)
    5701             : {
    5702           0 :   bool special = val & 0x80000000;
    5703           0 :   return special ? calculator(val ^ 0x80000000) : val;
    5704             : }
    5705             : 
    5706           0 : Coordinate libmspub::CustomShape::getTextRectangle(double x, double y, double width, double height, boost::function<double (unsigned index)> calculator) const
    5707             : {
    5708           0 :   double scaleX = width * m_coordWidth;
    5709           0 :   double scaleY = height * m_coordHeight;
    5710           0 :   if (m_numTextRectangles == 0)
    5711             :   {
    5712           0 :     return Coordinate(x, y, x + width, y + height);
    5713             :   }
    5714           0 :   const Vertex &start = mp_textRectangles[0].first;
    5715           0 :   const Vertex &end = mp_textRectangles[0].second;
    5716           0 :   double startX = x + scaleX * getSpecialIfNecessary(calculator, start.m_x);
    5717           0 :   double startY = y + scaleY * getSpecialIfNecessary(calculator, start.m_y);
    5718           0 :   double endX = x + scaleX * getSpecialIfNecessary(calculator, end.m_x);
    5719           0 :   double endY = y + scaleY * getSpecialIfNecessary(calculator, end.m_y);
    5720           0 :   return Coordinate(startX, startY, endX, endY);
    5721             : }
    5722             : 
    5723           0 : struct LineInfo
    5724             : {
    5725             :   WPXPropertyListVector m_vertices;
    5726             :   double m_width;
    5727             :   WPXString m_color;
    5728             :   bool m_lineExists;
    5729           0 :   LineInfo(WPXPropertyListVector vertices, Line current, std::vector<Color> palette) : m_vertices(vertices),
    5730             :     m_width((double)(current.m_widthInEmu) / EMUS_IN_INCH),
    5731           0 :     m_color(libmspub::MSPUBCollector::getColorString(current.m_color.getFinalColor(palette))),
    5732           0 :     m_lineExists(current.m_lineExists) { }
    5733           0 :   void output(libwpg::WPGPaintInterface *painter, WPXPropertyList &graphicsProps)
    5734             :   {
    5735           0 :     graphicsProps.insert("draw:stroke", m_lineExists ? "solid" : "none");
    5736           0 :     graphicsProps.insert("svg:stroke-width", m_width);
    5737           0 :     graphicsProps.insert("svg:stroke-color", m_color);
    5738           0 :     painter->setStyle(graphicsProps, WPXPropertyListVector());
    5739           0 :     painter->drawPolyline(m_vertices);
    5740           0 :   }
    5741             : private:
    5742             : };
    5743             : 
    5744           0 : void drawEmulatedLine(boost::shared_ptr<const CustomShape> shape, ShapeType shapeType, const std::vector<Line> &lines,
    5745             :                       Vector2D center, VectorTransformation2D transform,
    5746             :                       double x, double y, double scaleX, double scaleY,
    5747             :                       bool drawStroke, WPXPropertyList &graphicsProps, libwpg::WPGPaintInterface *painter,
    5748             :                       boost::function<double (unsigned index)> calculator,
    5749             :                       const std::vector<Color> &palette)
    5750             : {
    5751           0 :   std::vector<LineInfo> lineInfos;
    5752           0 :   unsigned i_line = 0;
    5753           0 :   bool rectangle = isShapeTypeRectangle(shapeType) && !lines.empty(); // ugly HACK: special handling for rectangle outlines.
    5754           0 :   Vector2D vector(0, 0);
    5755           0 :   Vector2D old(0, 0);
    5756           0 :   for (unsigned i = 0; i < shape->m_numVertices; ++i)
    5757             :   {
    5758           0 :     WPXPropertyListVector vertices;
    5759           0 :     WPXPropertyList vertex;
    5760           0 :     if (i > 0)
    5761             :     {
    5762           0 :       WPXPropertyList vertexStart;
    5763           0 :       double lineWidth = (double)(lines[i_line].m_widthInEmu) / EMUS_IN_INCH;
    5764           0 :       switch (i - 1) // fudge the lines inward by half their width so they are fully inside the shape and hence proper borders
    5765             :       {
    5766             :       case 0:
    5767           0 :         old.m_y += lineWidth / 2;
    5768           0 :         break;
    5769             :       case 1:
    5770           0 :         old.m_x -= lineWidth / 2;
    5771           0 :         break;
    5772             :       case 2:
    5773           0 :         old.m_y -= lineWidth / 2;
    5774           0 :         break;
    5775             :       case 3:
    5776           0 :         old.m_x += lineWidth / 2;
    5777           0 :         break;
    5778             :       }
    5779           0 :       old = transform.transformWithOrigin(old, center);
    5780           0 :       vertexStart.insert("svg:x", old.m_x);
    5781           0 :       vertexStart.insert("svg:y", old.m_y);
    5782           0 :       vertices.append(vertexStart);
    5783             :     }
    5784           0 :     vector.m_x = x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[i].m_x);
    5785           0 :     vector.m_y = y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[i].m_y);
    5786           0 :     old = vector;
    5787           0 :     if (rectangle)
    5788             :     {
    5789           0 :       double lineWidth = (double)(lines[i_line].m_widthInEmu) / EMUS_IN_INCH;
    5790           0 :       switch (i) // fudge the lines inward by half their width so they are fully inside the shape and hence proper borders
    5791             :       {
    5792             :       case 1:
    5793           0 :         vector.m_y += lineWidth / 2;
    5794           0 :         break;
    5795             :       case 2:
    5796           0 :         vector.m_x -= lineWidth / 2;
    5797           0 :         break;
    5798             :       case 3:
    5799           0 :         vector.m_y -= lineWidth / 2;
    5800           0 :         break;
    5801             :       case 4:
    5802           0 :         vector.m_x += lineWidth / 2;
    5803           0 :         break;
    5804             :       }
    5805             :     }
    5806           0 :     vector = transform.transformWithOrigin(vector, center);
    5807           0 :     vertex.insert("svg:x", vector.m_x);
    5808           0 :     vertex.insert("svg:y", vector.m_y);
    5809           0 :     vertices.append(vertex);
    5810           0 :     if (i > 0)
    5811             :     {
    5812           0 :       lineInfos.push_back(LineInfo(vertices, lines[i_line], palette));
    5813           0 :       if (drawStroke)
    5814             :       {
    5815           0 :         if (i_line + 1 < lines.size()) // continue using the last element if we run out of lines.
    5816             :         {
    5817           0 :           ++i_line;
    5818             :         }
    5819             :       }
    5820             :     }
    5821           0 :   }
    5822           0 :   if (rectangle)
    5823             :   {
    5824           0 :     LineInfo *top = &lineInfos[0];
    5825           0 :     LineInfo *right = (lineInfos.size() > 1) ? &lineInfos[1] : NULL;
    5826           0 :     LineInfo *bottom = (lineInfos.size() > 2) ? &lineInfos[2] : NULL;
    5827           0 :     LineInfo *left = (lineInfos.size() > 3) ? &lineInfos[3] : NULL;
    5828           0 :     if (left)
    5829             :     {
    5830           0 :       left->output(painter, graphicsProps);
    5831             :     }
    5832           0 :     if (right)
    5833             :     {
    5834           0 :       right->output(painter, graphicsProps);
    5835             :     }
    5836           0 :     if (top)
    5837             :     {
    5838           0 :       top->output(painter, graphicsProps);
    5839             :     }
    5840           0 :     if (bottom)
    5841             :     {
    5842           0 :       bottom->output(painter, graphicsProps);
    5843             :     }
    5844             :   }
    5845             :   else
    5846             :   {
    5847           0 :     for (unsigned i = 0; i < lineInfos.size(); ++i)
    5848             :     {
    5849           0 :       lineInfos[i].output(painter, graphicsProps);
    5850             :     }
    5851           0 :   }
    5852           0 : }
    5853             : 
    5854           0 : void getRayEllipseIntersection(double initX, double initY, double rx, double ry, double cx, double cy, double &xOut, double &yOut)
    5855             : {
    5856           0 :   double x = initX - cx;
    5857           0 :   double y = initY - cy;
    5858           0 :   if (x != 0 && y != 0)
    5859             :   {
    5860           0 :     xOut = rx * ry / sqrt(ry * ry + rx * rx * (y / x) * (y / x));
    5861           0 :     if (x < 0)
    5862             :     {
    5863           0 :       xOut *= -1;
    5864             :     }
    5865           0 :     yOut = xOut * y / x;
    5866             :   }
    5867           0 :   else if (y != 0)
    5868             :   {
    5869           0 :     xOut = 0;
    5870           0 :     if (y > 0)
    5871             :     {
    5872           0 :       yOut = ry;
    5873             :     }
    5874             :     else
    5875             :     {
    5876           0 :       yOut = -ry;
    5877             :     }
    5878             :   }
    5879           0 :   else if (x != 0)
    5880             :   {
    5881           0 :     yOut = 0;
    5882           0 :     if (x > 0)
    5883             :     {
    5884           0 :       xOut = rx;
    5885             :     }
    5886             :     else
    5887             :     {
    5888           0 :       xOut = -rx;
    5889             :     }
    5890             :   }
    5891             :   else
    5892             :   {
    5893           0 :     xOut = yOut = 0;
    5894             :   }
    5895           0 :   xOut += cx;
    5896           0 :   yOut += cy;
    5897           0 : }
    5898             : 
    5899           0 : void libmspub::writeCustomShape(ShapeType shapeType, WPXPropertyList &graphicsProps, libwpg::WPGPaintInterface *painter, double x, double y, double height, double width, bool closeEverything, VectorTransformation2D transform, std::vector<Line> lines, boost::function<double(unsigned index)> calculator, const std::vector<Color> &palette, boost::shared_ptr<const CustomShape> shape)
    5900             : {
    5901             :   MSPUB_DEBUG_MSG(("***STARTING CUSTOM SHAPE***\n"));
    5902           0 :   if (!shape)
    5903             :   {
    5904             :     return;
    5905             :   }
    5906           0 :   bool drawStroke = !lines.empty();
    5907           0 :   bool horizontal = height == 0;
    5908           0 :   bool vertical = width == 0;
    5909           0 :   if (horizontal && vertical)
    5910             :   {
    5911             :     return;
    5912             :   }
    5913           0 :   Vector2D center(x + width / 2, y + height / 2);
    5914           0 :   double scaleX = width / shape->m_coordWidth;
    5915           0 :   double scaleY = height / shape->m_coordHeight;
    5916           0 :   bool allLinesSame = true;
    5917           0 :   for (unsigned i = 0; allLinesSame && i + 1< lines.size(); ++i)
    5918             :   {
    5919           0 :     const Line &l1 = lines[i];
    5920           0 :     const Line &l2 = lines[i + 1];
    5921           0 :     allLinesSame = l1 == l2;
    5922             :   }
    5923           0 :   if (shape->mp_elements == NULL)
    5924             :   {
    5925           0 :     bool shouldDrawShape = true;
    5926           0 :     if ((!graphicsProps["draw:fill"]) || (graphicsProps["draw:fill"]->getStr() == "none"))
    5927             :     {
    5928           0 :       if (!allLinesSame)
    5929             :       {
    5930             :         drawEmulatedLine(shape, shapeType, lines, center, transform,
    5931           0 :                          x, y, scaleX, scaleY, drawStroke, graphicsProps, painter, calculator, palette);
    5932           0 :         shouldDrawShape = false;
    5933             :       }
    5934           0 :       else if (drawStroke)
    5935             :       {
    5936           0 :         Line &first = lines[0];
    5937           0 :         if (!first.m_lineExists)
    5938             :         {
    5939           0 :           graphicsProps.insert("draw:stroke", "none");
    5940             :         }
    5941           0 :         graphicsProps.insert("svg:stroke-width", (double)(first.m_widthInEmu) / EMUS_IN_INCH);
    5942           0 :         graphicsProps.insert("svg:stroke-color", libmspub::MSPUBCollector::getColorString(first.m_color.getFinalColor(palette)));
    5943           0 :         painter->setStyle(graphicsProps, WPXPropertyListVector());
    5944             :       }
    5945             :     }
    5946           0 :     if (shouldDrawShape)
    5947             :     {
    5948           0 :       WPXPropertyListVector vertices;
    5949           0 :       for (unsigned i = 0; i < shape->m_numVertices; ++i)
    5950             :       {
    5951           0 :         WPXPropertyList vertex;
    5952           0 :         Vector2D vector(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[i].m_x),
    5953           0 :                         y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[i].m_y));
    5954           0 :         vector = transform.transformWithOrigin(vector, center);
    5955           0 :         vertex.insert("svg:x", vector.m_x);
    5956           0 :         vertex.insert("svg:y", vector.m_y);
    5957           0 :         vertices.append(vertex);
    5958           0 :       }
    5959           0 :       painter->drawPolygon(vertices);
    5960             :     }
    5961             :   }
    5962             :   else
    5963             :   {
    5964           0 :     WPXPropertyListVector vertices;
    5965           0 :     if (drawStroke)
    5966             :     {
    5967             :       // don't bother with different strokes for things defined by segments
    5968           0 :       Line &first = lines[0];
    5969           0 :       if (!first.m_lineExists)
    5970             :       {
    5971           0 :         graphicsProps.insert("draw:stroke", "none");
    5972             :       }
    5973           0 :       graphicsProps.insert("svg:stroke-width", (double)(first.m_widthInEmu) / EMUS_IN_INCH);
    5974           0 :       graphicsProps.insert("svg:stroke-color", libmspub::MSPUBCollector::getColorString(first.m_color.getFinalColor(palette)));
    5975           0 :       painter->setStyle(graphicsProps, WPXPropertyListVector());
    5976             :     }
    5977           0 :     unsigned vertexIndex = 0;
    5978           0 :     bool hasUnclosedElements = false;
    5979           0 :     boost::optional<Vector2D> lastPoint;
    5980             :     // Escher assigns segments into subpaths somewhat differently than SVG does,
    5981             :     // so we have to keep track of the following, rather than just adding a 'Z'
    5982             :     // directive on path close and expecting everything to work.
    5983           0 :     boost::optional<Vector2D> pathBegin;
    5984           0 :     for (unsigned i = 0; i < shape->m_numElements; ++i)
    5985             :     {
    5986           0 :       ShapeElementCommand cmd = getCommandFromBinary(shape->mp_elements[i]);
    5987           0 :       switch (cmd.m_command)
    5988             :       {
    5989             :       case ELLIPTICALQUADRANTX:
    5990             :       case ELLIPTICALQUADRANTY:
    5991             :       {
    5992           0 :         if (cmd.m_command == ELLIPTICALQUADRANTX)
    5993             :         {
    5994             :           MSPUB_DEBUG_MSG(("ELLIPTICALQUADRANTX %d\n", cmd.m_count));
    5995             :         }
    5996             :         else
    5997             :         {
    5998             :           MSPUB_DEBUG_MSG(("ELLIPTICALQUADRANTY %d\n", cmd.m_count));
    5999             :         }
    6000           0 :         bool firstDirection = true;
    6001           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex < shape->m_numVertices); ++j, ++vertexIndex)
    6002             :         {
    6003           0 :           bool modifier = cmd.m_command == ELLIPTICALQUADRANTX ? true : false;
    6004           0 :           const Vertex &curr = shape->mp_vertices[vertexIndex];
    6005           0 :           Vector2D curr2D(x + scaleX * getSpecialIfNecessary(calculator, curr.m_x), y + scaleY * getSpecialIfNecessary(calculator, curr.m_y));
    6006           0 :           if (lastPoint.is_initialized())
    6007             :           {
    6008           0 :             if (!pathBegin.is_initialized())
    6009             :             {
    6010           0 :               pathBegin = curr2D;
    6011             :             }
    6012           0 :             hasUnclosedElements = true;
    6013           0 :             double prevX = lastPoint.get().m_x;
    6014           0 :             double prevY = lastPoint.get().m_y;
    6015           0 :             double tmpX = curr2D.m_x - prevX;
    6016           0 :             double tmpY = curr2D.m_y - prevY;
    6017           0 :             if ((tmpX < 0 && tmpY >= 0) || (tmpX >= 0 && tmpY < 0))
    6018             :             {
    6019           0 :               if (j == 0)
    6020             :               {
    6021           0 :                 firstDirection = true;
    6022             :               }
    6023           0 :               else if (! firstDirection)
    6024             :               {
    6025           0 :                 modifier = !modifier;
    6026             :               }
    6027             :             }
    6028             :             else
    6029             :             {
    6030           0 :               if (j == 0)
    6031             :               {
    6032           0 :                 firstDirection = false;
    6033             :               }
    6034           0 :               else if (firstDirection)
    6035             :               {
    6036           0 :                 modifier = !modifier;
    6037             :               }
    6038             :             }
    6039           0 :             if (modifier)
    6040             :             {
    6041           0 :               tmpX = curr2D.m_x;
    6042           0 :               tmpY = prevY;
    6043             :             }
    6044             :             else
    6045             :             {
    6046           0 :               tmpX = prevX;
    6047           0 :               tmpY = curr2D.m_y;
    6048             :             }
    6049           0 :             double vecX = (tmpX - prevX) / 2;
    6050           0 :             double vecY = (tmpY - prevY) / 2;
    6051           0 :             Vector2D vec1(prevX + vecX, prevY + vecY);
    6052           0 :             vecX = (tmpX - curr2D.m_x) / 2;
    6053           0 :             vecY = (tmpY - curr2D.m_y) / 2;
    6054           0 :             Vector2D vec2(curr2D.m_x + vecX, curr2D.m_y + vecY);
    6055           0 :             vec1 = transform.transformWithOrigin(vec1, center);
    6056           0 :             vec2 = transform.transformWithOrigin(vec2, center);
    6057           0 :             curr2D = transform.transformWithOrigin(curr2D, center);
    6058           0 :             WPXPropertyList bezier;
    6059           0 :             bezier.insert("libwpg:path-action", "C");
    6060           0 :             bezier.insert("svg:x1", vec1.m_x);
    6061           0 :             bezier.insert("svg:x2", vec2.m_x);
    6062           0 :             bezier.insert("svg:y1", vec1.m_y);
    6063           0 :             bezier.insert("svg:y2", vec2.m_y);
    6064           0 :             bezier.insert("svg:x", curr2D.m_x);
    6065           0 :             bezier.insert("svg:y", curr2D.m_y);
    6066           0 :             vertices.append(bezier);
    6067             :           }
    6068             :           else
    6069             :           {
    6070             :             //something is broken, just move
    6071           0 :             if (vertexIndex < shape->m_numVertices)
    6072             :             {
    6073           0 :               WPXPropertyList moveVertex;
    6074           0 :               if (hasUnclosedElements && closeEverything)
    6075             :               {
    6076           0 :                 WPXPropertyList closeVertex;
    6077           0 :                 closeVertex.insert("libwpg:path-action", "Z");
    6078           0 :                 vertices.append(closeVertex);
    6079             :               }
    6080           0 :               hasUnclosedElements = false;
    6081           0 :               Vector2D new_(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x), y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y));
    6082           0 :               new_ = transform.transformWithOrigin(new_, center);
    6083           0 :               moveVertex.insert("svg:x", new_.m_x);
    6084           0 :               moveVertex.insert("svg:y", new_.m_y);
    6085           0 :               moveVertex.insert("libwpg:path-action", "M");
    6086           0 :               vertices.append(moveVertex);
    6087           0 :               ++vertexIndex;
    6088             :             }
    6089             :           }
    6090             :         }
    6091             :       }
    6092           0 :       break;
    6093             :       case CLOCKWISEARCTO:
    6094             :       case CLOCKWISEARC:
    6095             :       case ARCTO:
    6096             :       case ARC:
    6097           0 :         switch (cmd.m_command)
    6098             :         {
    6099             :         case CLOCKWISEARCTO:
    6100             :           MSPUB_DEBUG_MSG(("CLOCKWISEARCTO %d\n", cmd.m_count));
    6101           0 :           break;
    6102             :         case CLOCKWISEARC:
    6103             :           MSPUB_DEBUG_MSG(("CLOCKWISEARC %d\n", cmd.m_count));
    6104           0 :           break;
    6105             :         case ARCTO:
    6106             :           MSPUB_DEBUG_MSG(("ARCTO %d\n", cmd.m_count));
    6107           0 :           break;
    6108             :         case ARC:
    6109             :           MSPUB_DEBUG_MSG(("ARC %d\n", cmd.m_count));
    6110           0 :           break;
    6111             :         default:
    6112           0 :           break;
    6113             :         }
    6114           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex + 3 < shape->m_numVertices); ++j, vertexIndex += 4)
    6115             :         {
    6116           0 :           for (unsigned k = 0; k < 4; ++k)
    6117             :           {
    6118             :             MSPUB_DEBUG_MSG(("Calculated vertex x: %f, y: %f\n", getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + k].m_x), getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + k].m_y)));
    6119             :           }
    6120           0 :           bool to = cmd.m_command == CLOCKWISEARCTO || cmd.m_command == ARCTO;
    6121           0 :           bool clockwise = cmd.m_command == CLOCKWISEARCTO || cmd.m_command == CLOCKWISEARC;
    6122           0 :           const Vertex &bound1 = shape->mp_vertices[vertexIndex];
    6123           0 :           const Vertex &bound2 = shape->mp_vertices[vertexIndex + 1];
    6124           0 :           const Vertex &start  = shape->mp_vertices[vertexIndex + 2];
    6125           0 :           const Vertex &end    = shape->mp_vertices[vertexIndex + 3];
    6126             : 
    6127           0 :           double bound1X = x + scaleX * getSpecialIfNecessary(calculator, bound1.m_x);
    6128           0 :           double bound1Y = y + scaleY * getSpecialIfNecessary(calculator, bound1.m_y);
    6129           0 :           double bound2X = x + scaleX * getSpecialIfNecessary(calculator, bound2.m_x);
    6130           0 :           double bound2Y = y + scaleY * getSpecialIfNecessary(calculator, bound2.m_y);
    6131           0 :           double rx = fabs(bound1X - bound2X) / 2;
    6132           0 :           double ry = fabs(bound1Y - bound2Y) / 2;
    6133           0 :           double cx = (bound1X + bound2X) / 2;
    6134           0 :           double cy = (bound1Y + bound2Y) / 2;
    6135           0 :           double startX = x + scaleX * getSpecialIfNecessary(calculator, start.m_x);
    6136           0 :           double startY = y + scaleY * getSpecialIfNecessary(calculator, start.m_y);
    6137           0 :           double endX = x + scaleX * getSpecialIfNecessary(calculator, end.m_x);
    6138           0 :           double endY = y + scaleY * getSpecialIfNecessary(calculator, end.m_y);
    6139           0 :           getRayEllipseIntersection(startX, startY, rx, ry, cx, cy, startX, startY);
    6140           0 :           getRayEllipseIntersection(endX, endY, rx, ry, cx, cy, endX, endY);
    6141           0 :           Vector2D start2D(startX, startY);
    6142           0 :           if (!pathBegin.is_initialized())
    6143             :           {
    6144           0 :             pathBegin = start2D;
    6145             :           }
    6146           0 :           start2D = transform.transformWithOrigin(start2D, center);
    6147           0 :           Vector2D end2D(endX, endY);
    6148           0 :           lastPoint = end2D;
    6149           0 :           end2D = transform.transformWithOrigin(end2D, center);
    6150           0 :           bool clockwiseAfterTransform = clockwise ^ transform.orientationReversing();
    6151           0 :           WPXPropertyList startVertex;
    6152           0 :           startVertex.insert("svg:x", start2D.m_x);
    6153           0 :           startVertex.insert("svg:y", start2D.m_y);
    6154           0 :           startVertex.insert("libwpg:path-action", ((to || closeEverything) && hasUnclosedElements) ? "L" : "M");
    6155           0 :           vertices.append(startVertex);
    6156           0 :           double startAngle = atan2(cy - startY, startX - cx);
    6157           0 :           double endAngle = atan2(cy -endY, endX - cx);
    6158           0 :           double angleDifference = clockwise ? doubleModulo(startAngle - endAngle, 2 * M_PI)
    6159           0 :                                    : doubleModulo(endAngle - startAngle, 2 * M_PI);
    6160             :           // don't worry about corner cases; the closer an arc gets to pi radians, the
    6161             :           // less difference there is between the large and small arcs, down to no difference at all
    6162             :           // for an exact 180-degree arc.
    6163           0 :           bool largeArc = angleDifference >= M_PI;
    6164           0 :           WPXPropertyList ellipseVertex;
    6165           0 :           ellipseVertex.insert("svg:x", end2D.m_x);
    6166           0 :           ellipseVertex.insert("svg:y", end2D.m_y);
    6167             :           // The next two lines won't work if "transform" stretches the shape.
    6168             :           // Since currently the only transforms are flips and rotations, this isn't a problem now,
    6169             :           // but keep it in mind if we ever change how this code works, since it breaks abstraction.
    6170           0 :           ellipseVertex.insert("svg:rx", rx);
    6171           0 :           ellipseVertex.insert("svg:ry", ry);
    6172           0 :           ellipseVertex.insert("libwpg:large-arc", largeArc ? 1 : 0);
    6173           0 :           ellipseVertex.insert("libwpg:sweep", clockwiseAfterTransform ? 1 : 0);
    6174           0 :           ellipseVertex.insert("libwpg:rotate", -transform.getRotation());
    6175           0 :           ellipseVertex.insert("libwpg:path-action", "A");
    6176           0 :           vertices.append(ellipseVertex);
    6177           0 :           hasUnclosedElements = true;
    6178           0 :         }
    6179           0 :         break;
    6180             : 
    6181             :       case ANGLEELLIPSE:
    6182             :         MSPUB_DEBUG_MSG(("ANGLEELLIPSE %d\n", cmd.m_count));
    6183           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex + 2 < shape->m_numVertices); ++j, vertexIndex += 3)
    6184             :         {
    6185           0 :           hasUnclosedElements = true;
    6186           0 :           WPXPropertyList vertex;
    6187           0 :           double startAngle = getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 2].m_x);
    6188           0 :           double endAngle = getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 2].m_y);
    6189           0 :           double cx = x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x);
    6190           0 :           double cy = y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y);
    6191           0 :           double rx = scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 1].m_x);
    6192           0 :           double ry = scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 1].m_y);
    6193             : 
    6194             :           // FIXME: Are angles supposed to be the actual angle of the point with the x-axis,
    6195             :           // or the eccentric anomaly, or something else?
    6196             :           //
    6197             :           // assuming eccentric anomaly for now
    6198           0 :           WPXPropertyList moveVertex;
    6199           0 :           Vector2D start(cx + rx * cos(startAngle * M_PI / 180),
    6200           0 :                          cy + ry * sin(startAngle * M_PI / 180));
    6201           0 :           if (!pathBegin.is_initialized())
    6202             :           {
    6203           0 :             pathBegin = start;
    6204             :           }
    6205           0 :           start = transform.transformWithOrigin(start, center);
    6206           0 :           moveVertex.insert("libwpg:path-action", "M");
    6207           0 :           moveVertex.insert("svg:x", start.m_x);
    6208           0 :           moveVertex.insert("svg:y", start.m_y);
    6209           0 :           vertices.append(moveVertex);
    6210           0 :           Vector2D half(cx + rx * cos(endAngle * M_PI / 360),
    6211           0 :                         cy + ry * sin(endAngle * M_PI / 360));
    6212           0 :           half = transform.transformWithOrigin(half, center);
    6213           0 :           WPXPropertyList halfVertex;
    6214           0 :           halfVertex.insert("libwpg:path-action", "A");
    6215           0 :           halfVertex.insert("svg:x", half.m_x);
    6216           0 :           halfVertex.insert("svg:y", half.m_y);
    6217           0 :           halfVertex.insert("svg:rx", rx * transform.getHorizontalScaling());
    6218           0 :           halfVertex.insert("svg:ry", ry * transform.getVerticalScaling());
    6219           0 :           halfVertex.insert("libwpg:rotate", transform.getRotation() * 180 / M_PI);
    6220           0 :           vertices.append(halfVertex);
    6221           0 :           Vector2D end(cx + rx * cos(endAngle * M_PI / 180),
    6222           0 :                        cy + ry * sin(endAngle * M_PI / 180));
    6223           0 :           lastPoint = end;
    6224           0 :           end = transform.transformWithOrigin(end, center);
    6225           0 :           vertex.insert("svg:x", end.m_x);
    6226           0 :           vertex.insert("svg:y", end.m_y);
    6227           0 :           vertex.insert("svg:rx", rx);
    6228           0 :           vertex.insert("svg:ry", ry);
    6229           0 :           vertex.insert("libwpg:rotate", transform.getRotation() * 180 / M_PI);
    6230           0 :           vertex.insert("libwpg:path-action", "A");
    6231           0 :           vertices.append(vertex);
    6232           0 :         }
    6233           0 :         break;
    6234             :       case MOVETO:
    6235             :         MSPUB_DEBUG_MSG(("MOVETO %d\n", cmd.m_count));
    6236           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex < shape->m_numVertices); ++j, ++vertexIndex)
    6237             :         {
    6238             :           MSPUB_DEBUG_MSG(("x: %f, y: %f\n", getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x), getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y)));
    6239           0 :           if (hasUnclosedElements && closeEverything)
    6240             :           {
    6241           0 :             WPXPropertyList closeVertex;
    6242           0 :             closeVertex.insert("libwpg:path-action", "Z");
    6243           0 :             vertices.append(closeVertex);
    6244             :           }
    6245           0 :           hasUnclosedElements = false;
    6246           0 :           WPXPropertyList moveVertex;
    6247           0 :           Vector2D new_(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x),
    6248           0 :                         y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y));
    6249           0 :           pathBegin = new_;
    6250           0 :           lastPoint = new_;
    6251           0 :           new_ = transform.transformWithOrigin(new_, center);
    6252           0 :           moveVertex.insert("svg:x", new_.m_x);
    6253           0 :           moveVertex.insert("svg:y", new_.m_y);
    6254           0 :           moveVertex.insert("libwpg:path-action", "M");
    6255           0 :           vertices.append(moveVertex);
    6256           0 :         }
    6257           0 :         break;
    6258             :       case LINETO:
    6259             :         MSPUB_DEBUG_MSG(("LINETO %d\n", cmd.m_count));
    6260           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex < shape->m_numVertices); ++j, ++vertexIndex)
    6261             :         {
    6262             :           MSPUB_DEBUG_MSG(("x: %f, y: %f\n", getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x), getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y)));
    6263           0 :           hasUnclosedElements = true;
    6264           0 :           WPXPropertyList vertex;
    6265           0 :           Vector2D vector(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x),
    6266           0 :                           y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y));
    6267           0 :           lastPoint = vector;
    6268           0 :           vector = transform.transformWithOrigin(vector, center);
    6269           0 :           vertex.insert("svg:x", vector.m_x);
    6270           0 :           vertex.insert("svg:y", vector.m_y);
    6271           0 :           vertex.insert("libwpg:path-action", "L");
    6272           0 :           vertices.append(vertex);
    6273           0 :         }
    6274           0 :         break;
    6275             :       case CURVETO:
    6276             :         MSPUB_DEBUG_MSG(("CURVETO %d\n", cmd.m_count));
    6277           0 :         for (unsigned j = 0; (j < cmd.m_count) && (vertexIndex + 2 < shape->m_numVertices); ++j, vertexIndex += 3)
    6278             :         {
    6279           0 :           hasUnclosedElements = true;
    6280           0 :           Vector2D firstCtrl(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_x),
    6281           0 :                              y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex].m_y));
    6282           0 :           firstCtrl = transform.transformWithOrigin(firstCtrl, center);
    6283           0 :           Vector2D secondCtrl(x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 1].m_x),
    6284           0 :                               y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 1].m_y));
    6285           0 :           secondCtrl = transform.transformWithOrigin(secondCtrl, center);
    6286           0 :           Vector2D end( x + scaleX * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 2].m_x),
    6287           0 :                         y + scaleY * getSpecialIfNecessary(calculator, shape->mp_vertices[vertexIndex + 2].m_y));
    6288           0 :           lastPoint = end;
    6289           0 :           end = transform.transformWithOrigin(end, center);
    6290           0 :           WPXPropertyList bezier;
    6291           0 :           bezier.insert("libwpg:path-action", "C");
    6292           0 :           bezier.insert("svg:x1", firstCtrl.m_x);
    6293           0 :           bezier.insert("svg:x2", secondCtrl.m_x);
    6294           0 :           bezier.insert("svg:y1", firstCtrl.m_y);
    6295           0 :           bezier.insert("svg:y2", secondCtrl.m_y);
    6296           0 :           bezier.insert("svg:x", end.m_x);
    6297           0 :           bezier.insert("svg:y", end.m_y);
    6298           0 :           vertices.append(bezier);
    6299           0 :         }
    6300           0 :         break;
    6301             :       case CLOSESUBPATH:
    6302             :       {
    6303             :         MSPUB_DEBUG_MSG(("CLOSESUBPATH\n"));
    6304           0 :         if (!pathBegin.is_initialized())
    6305             :         {
    6306             :           MSPUB_DEBUG_MSG(("Tried to close a subpath that hadn't yet begun!\n"));
    6307             :         }
    6308           0 :         else if (closeEverything)
    6309             :         {
    6310           0 :           WPXPropertyList end;
    6311           0 :           end.insert("libwpg:path-action", "Z");
    6312           0 :           vertices.append(end);
    6313             :         }
    6314             :         else
    6315             :         {
    6316           0 :           WPXPropertyList end;
    6317           0 :           end.insert("libwpg:path-action", "L");
    6318           0 :           Vector2D transformedPathBegin = transform.transformWithOrigin(pathBegin.get(), center);
    6319           0 :           end.insert("svg:x", transformedPathBegin.m_x);
    6320           0 :           end.insert("svg:y", transformedPathBegin.m_y);
    6321           0 :           vertices.append(end);
    6322             :         }
    6323           0 :         hasUnclosedElements = false;
    6324             :       }
    6325             :       //intentionally no break
    6326             :       case ENDSUBPATH:
    6327             :         MSPUB_DEBUG_MSG(("ENDSUBPATH\n"));
    6328           0 :         if (closeEverything && pathBegin.is_initialized())
    6329             :         {
    6330           0 :           WPXPropertyList end;
    6331           0 :           end.insert("libwpg:path-action", "Z");
    6332           0 :           vertices.append(end);
    6333             :         }
    6334           0 :         pathBegin = boost::optional<Vector2D>();
    6335           0 :         break;
    6336             :       case NOFILL:
    6337             :         MSPUB_DEBUG_MSG(("NOFILL (ignored)\n"));
    6338           0 :         break;
    6339             :       case NOSTROKE:
    6340             :         MSPUB_DEBUG_MSG(("NOSTROKE (ignored)\n"));
    6341           0 :         break;
    6342             :       default:
    6343             :         MSPUB_DEBUG_MSG(("Unknown custom shape command %d\n", cmd.m_command));
    6344           0 :         break;
    6345             :       }
    6346             :     }
    6347           0 :     if (hasUnclosedElements && closeEverything)
    6348             :     {
    6349           0 :       if (pathBegin.is_initialized())
    6350             :       {
    6351           0 :         WPXPropertyList end;
    6352           0 :         end.insert("libwpg:path-action", "Z");
    6353           0 :         vertices.append(end);
    6354             :       }
    6355             :     }
    6356           0 :     painter->drawPath(vertices);
    6357             :   }
    6358             : }
    6359             : 
    6360           0 : bool libmspub::isShapeTypeRectangle(ShapeType type)
    6361             : {
    6362           0 :   return type == RECTANGLE || type == TEXT_BOX;
    6363             : }
    6364             : 
    6365             : 
    6366           0 : boost::shared_ptr<const libmspub::CustomShape> libmspub::getFromDynamicCustomShape(const libmspub::DynamicCustomShape &dcs)
    6367             : {
    6368             :   return boost::shared_ptr<const CustomShape>(new CustomShape(
    6369           0 :            dcs.m_vertices.empty() ? NULL : &dcs.m_vertices[0],
    6370           0 :            dcs.m_vertices.size(),
    6371           0 :            dcs.m_elements.empty() ? NULL : &dcs.m_elements[0],
    6372           0 :            dcs.m_elements.size(),
    6373           0 :            dcs.m_calculations.empty() ? NULL : &dcs.m_calculations[0],
    6374           0 :            dcs.m_calculations.size(),
    6375           0 :            dcs.m_defaultAdjustValues.empty() ? NULL :
    6376           0 :            &dcs.m_defaultAdjustValues[0],
    6377           0 :            dcs.m_defaultAdjustValues.size(),
    6378           0 :            dcs.m_textRectangles.empty() ? NULL : &dcs.m_textRectangles[0],
    6379           0 :            dcs.m_textRectangles.size(),
    6380             :            dcs.m_coordWidth, dcs.m_coordHeight,
    6381           0 :            dcs.m_gluePoints.empty() ? NULL : &dcs.m_gluePoints[0],
    6382           0 :            dcs.m_gluePoints.size(),
    6383             :            dcs.m_adjustShiftMask
    6384           0 :          ));
    6385           0 : }
    6386             : 
    6387             : /* vim:set shiftwidth=2 softtabstop=2 expandtab: */

Generated by: LCOV version 1.10