$ od -c -N 50000 [Indigo]<AltoSource>DDRAWSOURCES.DM!2
0000000  377  \0  \0   d   d   r   a   w   .   l   d  \0 373 226   H 244
0000020    Y  \0  \0 376 001  \0 004   :   B   L   D   R   /   F   /   B
0000040    /   R               1   1   0   0   /   N           5   2   0
0000060    /   W           D   D   R   A   W   /   S       ^  \r   Z   P
0000100    E   D   I   T           Z   P   U   T   I   L           Z   P
0000120    B   L   O   C   K           D   S   P   L   I   N   E   1    
0000140        F   L   O   A   T       ^  \r   C   /   Q           Z   P
0000160    I   N   T   E   R           Z   P   D   R   A   W           Z
0000200    P   T   E   X   T           Z   P   M   A   K   E           Z
0000220    P   C   O   N   V   E   R   T           Z   P   C   O   L   O
0000240    R           Z   P   F   O   N   T       ^  \r   B   /   Q    
0000260        D   Z   P   I   N   I   T   1           Z   P   I   N   I
0000300    T   2           Z   P   F   O   N   T   I   O           R   E
0000320    A   D   U   S   E   R   C   M   I   T   E   M       ^  \r   E
0000340    /   Q           ^  \r   B   /   P           D   R   A   W   O
0000360    V   1   /   B           Z   P   D   I   S   P           Z   P
0000400    U   P   D   A   T   E           Z   P   I   T   E   M       ^
0000420   \r   B   /   P           D   R 376 001  \0 242 304   A   W   O
0000440    V   2   /   B           Z   P   D   I   S   P           Z   P
0000460    I   O           Z   P   F   O   N   T   I   O           Z   P
0000500    A   D   J   U   S   T           Z   P   A   R   R   O   W   S
0000520        ^  \r   B   /   P           D   R   A   W   O   V   3   /
0000540    B           Z   P   D   I   S   P           Z   P   F   R   E
0000560    E   H   A   N   D       ^  \r   C   /   P           D   R   A
0000600    W   O   V   4   /   B           Z   P   P   R   E   S   S    
0000620        Z   P   O   B   J   E   C   T   1           Z   P   O   B
0000640    J   E   C   T   2           Z   P   P   I   E   C   E        
0000660    Z   P   P   U   T   S           Z   P   A   R   R   O   W   S
0000700            T   I   M   E   C   O   N   V   A           T   I   M
0000720    E   C   O   N   V   B           T   I   M   E   I   O       ^
0000740   \r   C   /   P           D   R   A   W   O   V   5   /   B    
0000760        Z   P   I   N   T   E   R           Z   P   D   R   A   W
0001000            Z   P   T   E   X   T           Z   P   M   A   K   E
0001020            Z   P   C   O   N   V   E   R   T         376  \0 020
0001040    P 031   Z   P   C   O   L   O   R           Z   P   F   O   N
0001060    T  \r 377  \0  \0   d   s   p   l   i   n   e   1   .   B   c
0001100    p   l  \0 373 226   H 243 276  \0  \0 376 001  \0   Z   {   /
0001120    /       F   i   l   e   :       S   P   L   I   N   E   1   .
0001140    B   C   P   L  \r   /   /       P   .   B   a   u   d   e   l
0001160    a   i   r   e       &       R   .   F   l   e   g   a   l  \r
0001200    /   /       D   e   c   e   m   b   e   r       5   ,       1
0001220    9   7   7           4   :   4   5       P   M  \r   /   /    
0001240    C   o   p   y   r   i   g   h   t       X   e   r   o   x    
0001260    C   o   r   p   o   r   a   t   i   o   n       1   9   7   9
0001300   \r  \r   /   /       T   h   e       p   r   o   c   e   d   u
0001320    r   e       P   a   r   a   m   e   t   r   i   c   S   p   l
0001340    i   n   e       i   m   p   l   e   m   e   n   t   s       t
0001360    h   e       a   l   g   o   r   i   t   h   m       (   1   .
0001400    2   .   7   )       d   e   s   c   r   i   b   e   d       i
0001420    n  \r   /   /  \t  \t   "   S   p   l   i   n   e       C   u
0001440    r   v   e       T   e   c   h   n   i   q   u   e   s   "  \r
0001460    /   /  \t  \t   b   y       P   .   B   a   u   d   e   l   a
0001500    i   r   e   ,       R   .   F   l   e   g   a   l   ,     376
0001520  001  \0   ~ 225   &       R   .   S   p   r   o   u   l   l  \r
0001540    /   /  \t  \t   X   e   r   o   x       I   n   t   e   r   n
0001560    a   l       R   e   p   o   r   t           (   M   a   y    
0001600    1   9   7   7   )  \r  \r   /   /           U   s   e   s    
0001620    M   I   C   R   O   C   O   D   E       f   l   o   a   t   i
0001640    n   g       p   o   i   n   t       r   o   u   t   i   n   e
0001660    s  \r  \r   /   /       o   u   t   g   o   i   n   g       p
0001700    r   o   c   e   d   u   r   e   s   :  \r  \r   e   x   t   e
0001720    r   n   a   l       [  \r  \t   P   a   r   a   m   e   t   r
0001740    i   c   S   p   l   i   n   e  \r  \t   P   S   e   r   r   o
0001760    r  \r  \t   ]  \r  \r   /   /       o   u   t   g   o   i   n
0002000    g       s   t   a   t   i   c   s   :  \r  \r   e   x   t   e
0002020    r   n   a   l       [  \r  \t   P   S   z   o   n   e  \r  \t
0002040    ]  \r  \r   s   t   a   t   i   c       [  \r  \t   P   S   z
0002060    o   n   e   =   0  \t  \t   /   /       s   t   o   r   a   g
0002100    e       z   o   n   e  \r  \t   ]  \r  \r   /   /       i   n
0002120    c   o   m   i 376 001  \0   |   J   n   g       p   r   o   c
0002140    e   d   u   r   e   s   :  \r  \r   e   x   t   e   r   n   a
0002160    l       [  \r  \t   F   L   D   ;       F   A   D   ;       F
0002200    M   L   ;       F   S   T  \t   /   /       m   i   c   r   o
0002220    F   L   O   A   T       (   A   l   t   o       f   l   o   a
0002240    t   i   n   g       p   o   i   n   t       p   a   c   k   a
0002260    g   e   )  \r  \t   F   L   D   I   ;       F   S   B   ;    
0002300    F   D   V   ;       F   C   M   ;       F   N   E   G  \r   /
0002320    /  \t   F   P   S   e   t   u   p  \r  \r  \t   A   l   l   o
0002340    c   a   t   e  \t  \t   /   /       A   l   t   o       S   Y
0002360    S   T   E   M  \r  \t   F   r   e   e  \r  \t   Z   e   r   o
0002400   \r  \t   ]  \r  \r   /   /       i   n   c   o   m   i   n   g
0002420        s   t   a   t   i   c   s   :  \r  \r   e   x   t   e   r
0002440    n   a   l       [  \r  \t   F   P   w   o   r   k  \t  \t   /
0002460    /       m   i   c   r   o   F   L   O   A   T       (   A   l
0002500    t   o       f   l   o   a   t   i   n   g       p   o   i   n
0002520    t       p   a   c   k   a   g   e 376 001  \0 235  \0   )  \r
0002540   \t   ]  \r  \r   /   /       l   o   c   a   l       d   e   f
0002560    i   n   i   t   i   o   n   s   :  \r  \r   m   a   n   i   f
0002600    e   s   t       [  \r  \t   n   a   t   u   r   a   l   S   p
0002620    l   i   n   e   =   0  \r  \t   p   e   r   i   o   d   i   c
0002640    S   p   l   i   n   e   =   1  \r  \t   /   /       f   l   o
0002660    a   t   i   n   g       p   o   i   n   t       r   e   g   i
0002700    s   t   e   r   s   :       1       t   o       4  \r  \t   a
0002720    c   1   =   1   ;       a   c   2   =   2   ;       a   c   3
0002740    =   3   ;       a   c   4   =   4  \r  \t   /   /       c   o
0002760    n   s   t   a   n   t   s   :  \r  \t   z   e   r   o   =   5
0003000    ;       o   n   e   =   6   ;       t   w   o   =   7   ;    
0003020    s   i   x   =   8  \r  \t   n   u   m   F   P   a   c   s   =
0003040    9  \r  \t   ]  \r  \r   s   t   r   u   c   t   u   r   e    
0003060    P   S   V   E   C       [  \r  \t   F   P   w   o   r   k   S
0003100    a   v   e       w   o   r   d  \r  \t   F   P   w   o   r   k
0003120    N   e   w       w   o   r   d  \r  \t   f   p   x     376 001
0003140   \0 353 264   w   o   r   d  \r  \t   f   p   y       w   o   r
0003160    d  \r  \t   a       w   o   r   d  \r  \t   b       w   o   r
0003200    d  \r  \t   c       w   o   r   d  \r  \t   r       w   o   r
0003220    d  \r  \t   s       w   o   r   d  \r  \t   ]  \r  \r   m   a
0003240    n   i   f   e   s   t       l   P   S   V   E   C   =   s   i
0003260    z   e       P   S   V   E   C   /   1   6  \r  \r   /   /    
0003300    l   o   c   a   l       s   t   a   t   i   c   s   :  \r  \r
0003320    s   t   a   t   i   c       [  \r  \t   P   S   v   e   c   =
0003340    0  \r  \t   ]  \r  \r  \r  \r   l   e   t       P   a   r   a
0003360    m   e   t   r   i   c   S   p   l   i   n   e   (   n   ,   x
0003400    ,   y   ,   p   1   x   ,   p   2   x   ,   p   3   x   ,   p
0003420    1   y   ,   p   2   y   ,   p   3   y   ,   s   p   l   i   n
0003440    e   T   y   p   e   ,   w   ;       n   u   m   a   r   g   s
0003460        n   a   r   g   s   )       =       v   a   l   o   f    
0003500    [  \r  \r  \t   /   /       d   e   f   a   u   l   t       a
0003520    r   g   u   m   e   n   t   s   ,       g   e   t       s   t
0003540    o   r   a 376 001  \0 310   z   g   e   ,       c   h   e   c
0003560    k       v   a   r   i   o   u   s       t   h   i   n   g   s
0003600   \r  \t   l   e   t       t   e   m   p   V   e   c   =       v
0003620    e   c       l   P   S   V   E   C  \r  \t   i   f       P   S
0003640    i   n   i   t   (   t   e   m   p   V   e   c   )       e   q
0003660        0       r   e   s   u   l   t   i   s       0  \r  \r  \t
0003700    l   e   t       p   1   ,   p   2   ,   p   3   ,   p   =   n
0003720    i   l   ,   n   i   l   ,   n   i   l   ,   n   i   l  \r  \t
0003740    l   e   t       c   ,   r   ,   s   =   0   ,   0   ,   0  \r
0003760   \r  \t   i   f       n       l   s       0       t   h   e   n
0004000        [  \r  \t  \t   /   /       c   o   n   v   e   r   t    
0004020    c   o   o   r   d   i   n   a   t   e   s       f   r   o   m
0004040        i   n   t   e   g   e   r       t   o       f   l   o   a
0004060    t   i   n   g       p   o   i   n   t  \r  \t  \t   n   =   -
0004100    n  \r  \t  \t   l   e   t       f   p   x   =   P   S   a   l
0004120    l   o   c   a   t   e   (   l   v   (   P   S   v   e   c   >
0004140    >   P   S   V   E   C   .   f 376 001  \0 377 231   p   x   )
0004160    ,       2   *   n   )  \r  \t  \t   l   e   t       f   p   y
0004200    =   P   S   a   l   l   o   c   a   t   e   (   l   v   (   P
0004220    S   v   e   c   >   >   P   S   V   E   C   .   f   p   y   )
0004240    ,       2   *   n   )  \r  \t  \t   i   f       (   f   p   x
0004260        e   q       0   )       %       (   f   p   y       e   q
0004300        0   )       r   e   s   u   l   t   i   s       0  \r  \t
0004320   \t   f   o   r       i   =   0       t   o       n   -   1    
0004340    d   o       [  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0004360    (   a   c   1   ,       x   !   i   )   ,       f   p   x   +
0004400    2   *   i   )  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0004420    (   a   c   1   ,       y   !   i   )   ,       f   p   y   +
0004440    2   *   i   )  \r  \t  \t  \t   ]  \r  \t  \t   x   =   f   p
0004460    x  \r  \t  \t   y   =   f   p   y  \r  \t  \t   ]  \r  \r  \t
0004500    s   w   i   t   c   h   o   n       n   a   r   g   s       i
0004520    n   t   o       [  \r  \t  \t   c   a   s   e       9   :  \r
0004540   \t  \t  \t   s   p   l   i   n   e   T   y   p   e 376 001  \0
0004560    n 025   =   n   a   t   u   r   a   l   S   p   l   i   n   e
0004600   \r  \t  \t   c   a   s   e       1   0   :  \r  \t  \t  \t   w
0004620    =   0  \r  \t  \t   c   a   s   e       1   1   :  \r  \t  \t
0004640   \t   i   f       s   p   l   i   n   e   T   y   p   e       n
0004660    e       n   a   t   u   r   a   l   S   p   l   i   n   e    
0004700    &  \r  \t  \t  \t               s   p   l   i   n   e   T   y
0004720    p   e       n   e       p   e   r   i   o   d   i   c   S   p
0004740    l   i   n   e       r   e   s   u   l   t   i   s       P   S
0004760    q   u   i   t   (   P   S   e   r   r   o   r   (   3   )   )
0005000   \r  \t  \t  \t   i   f       n       l   s       3       t   h
0005020    e   n       s   p   l   i   n   e   T   y   p   e   =   n   a
0005040    t   u   r   a   l   S   p   l   i   n   e  \r  \t  \t  \t   e
0005060    n   d   c   a   s   e  \r  \t  \t   d   e   f   a   u   l   t
0005100    :  \r  \t  \t  \t   r   e   s   u   l   t   i   s       P   S
0005120    q   u   i   t   (   P   S   e   r   r   o   r   (   4   )   )
0005140   \r  \t  \t   ]  \r  \r  \t   i   f       s   p   l   i   n   e
0005160    T   y 376 001  \0 302   %   p   e       e   q       p   e   r
0005200    i   o   d   i   c   S   p   l   i   n   e       t   h   e   n
0005220        [  \r  \t  \t   i   f       (   (   F   C   M   (   F   L
0005240    D   (   a   c   1   ,   x   )   ,       x   +   2   *   (   n
0005260    -   1   )   )       n   e       0   )       %  \r  \t  \t    
0005300            (   F   C   M   (   F   L   D   (   a   c   2   ,   y
0005320    )   ,       y   +   2   *   (   n   -   1   )   )       n   e
0005340        0   )   )       r   e   s   u   l   t   i   s       P   S
0005360    q   u   i   t   (   P   S   e   r   r   o   r   (   2   )   )
0005400   \r  \t  \t   c   =   P   S   a   l   l   o   c   a   t   e   (
0005420    l   v   (   P   S   v   e   c   >   >   P   S   V   E   C   .
0005440    c   )   ,       2   *   n   )  \r  \t  \t   r   =   P   S   a
0005460    l   l   o   c   a   t   e   (   l   v   (   P   S   v   e   c
0005500    >   >   P   S   V   E   C   .   r   )   ,       2   *   n   )
0005520   \r  \t  \t   s   =   P   S   a   l   l   o   c   a   t   e   (
0005540    l   v   (   P   S   v   e   c   >   >   P   S   V   E   C   .
0005560    s   )   ,       2   *   n 376 001  \0 315 232   )  \r  \t  \t
0005600    i   f       (   c       e   q       0   )       %       (   r
0005620        e   q       0   )       %       (   s       e   q       0
0005640    )       r   e   s   u   l   t   i   s       0  \r  \t  \t   ]
0005660   \r  \r  \t   l   e   t       a   =   P   S   a   l   l   o   c
0005700    a   t   e   (   l   v   (   P   S   v   e   c   >   >   P   S
0005720    V   E   C   .   a   )   ,       2   *   n   )  \r  \t   l   e
0005740    t       b   =   P   S   a   l   l   o   c   a   t   e   (   l
0005760    v   (   P   S   v   e   c   >   >   P   S   V   E   C   .   b
0006000    )   ,       2   *   n   )  \r  \t   i   f       (   a       e
0006020    q       0   )       %       (   b       e   q       0   )    
0006040    r   e   s   u   l   t   i   s       0  \r  \r  \t   /   /    
0006060    a   (   0   )   =   w   (   0   )  \r  \t   F   S   T   (   F
0006100    L   D   I   (   a   c   1   ,       (   w       ?       (   w
0006120    !   1   )   +   4   ,           4   )   )   ,       a   )  \r
0006140   \r  \t   /   /   a   (   i   )   =   w   (   i   )   -   1   /
0006160    a   (   i   -   1   )           {   i   =   1 376 001  \0 203
0006200    Q   ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t   /   /
0006220    w   (   i   )       d   e   f   a   u   l   t   s       t   o
0006240        4   .               {   1   =   0   ,   1   ,   .   .   .
0006260    ,   n   -   3   }  \r  \t   f   o   r       i   =   1       t
0006300    o       n   -   3       d   o       [  \r  \t  \t   F   S   T
0006320    (       F   S   B       (   F   L   D   I   (   a   c   4   ,
0006340    (   w       ?       (   w   !   (   i   +   1   )   )   +   4
0006360    ,       4   )   )   ,       F   D   V   (   F   L   D   I   (
0006400    a   c   2   ,   1   )   ,       a   c   1   )   )   ,       a
0006420    +   i   *   2   )  \r  \t  \t   F   L   D   (   a   c   1   ,
0006440    a   c   4   )  \r  \t  \t   ]  \r  \r  \t   i   f       s   p
0006460    l   i   n   e   T   y   p   e       e   q       p   e   r   i
0006500    o   d   i   c   S   p   l   i   n   e       t   h   e   n    
0006520    [  \r  \t  \t   /   /       c   (   0   )   =   1  \r  \t  \t
0006540    F   S   T   (   o   n   e   ,       c   )  \r  \t  \t   /   /
0006560        c   (   i   )   =   -   c   (   i   -   1   )   /   a   (
0006600    i 376 001  \0 203 204   -   1   )               {   i   =   1
0006620    ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t   f   o
0006640    r       i   =   1       t   o       n   -   3       d   o  \r
0006660   \t  \t  \t   F   S   T   (   F   N   E   G   (   F   D   V   (
0006700    F   L   D   (   a   c   1   ,       c   +   2   *   (   i   -
0006720    1   )   )   ,       a   +   2   *   (   i   -   1   )   )   )
0006740    ,       c   +   2   *   i   )  \r  \t  \t   ]  \r  \r  \t   /
0006760    /   d   o       e   v   e   r   y   t   h   i   n   g       t
0007000    w   i   c   e       t   o       g   e   t       x   (   t   )
0007020            a   n   d       y   (   t   )   .  \r  \t   f   o   r
0007040        t   =   1       t   o       2       d   o       [  \r  \t
0007060   \t   t   e   s   t       (       t       e   q       1       )
0007100   \r  \t  \t               i   f   s   o       [       p   =   x
0007120    ;       p   1   =   p   1   x   ;       p   2   =   p   2   x
0007140    ;       p   3   =   p   3   x       ]  \r  \t  \t            
0007160    i   f   n   o   t       [       p   =   y   ;       p   1   =
0007200    p   1   y   ;       p 376 001  \0   \ 205   2   =   p   2   y
0007220    ;       p   3   =   p   3   y       ]  \r  \r  \t  \t   c   o
0007240    m   p   u   t   e   b   c   :  \r  \t  \t   i   f       n    
0007260    g   e       3       t   h   e   n       t   e   s   t       s
0007300    p   l   i   n   e   T   y   p   e       e   q       n   a   t
0007320    u   r   a   l   S   p   l   i   n   e  \r  \t  \t   i   f   s
0007340    o       [  \r  \t  \t  \t   /   /   b   (   0   )   =   6   *
0007360    (   p   (   2   )   -   2   *   p   (   1   )   +   p   (   0
0007400    )   )  \r  \t  \t  \t   F   S   T   (   F   M   L   (   F   A
0007420    D   (   F   S   B   (   F   S   B   (   F   L   D   (   a   c
0007440    1   ,       p   +   4   )   ,       p   +   2   )   ,       p
0007460    +   2   )   ,       p   )   ,       s   i   x   )   ,       b
0007500    )  \r  \r  \t  \t  \t   /   /   b   (   i   )   =   6   *   (
0007520    p   (   i   +   2   )   -   2   *   p   (   i   +   1   )   +
0007540    p   (   i   )   )   -   b   (   i   -   1   )   /   a   (   i
0007560    -   1   )           {   i   =   1   ,   2   ,   .   .   .   ,
0007600    n   -   3   }  \r  \t  \t  \t   f   o   r 376 001  \0 355 364
0007620        i   =   1       t   o       n   -   3       d   o       [
0007640   \r  \t  \t  \t  \t   F   M   L   (   F   L   D   (   a   c   2
0007660    ,       p   +   2   *   (   i   +   1   )   )   ,       t   w
0007700    o   )  \r  \t  \t  \t  \t   F   M   L   (   F   A   D   (   F
0007720    S   B   (   F   L   D   (   a   c   1   ,       p   +   2   *
0007740    (   i   +   2   )   )   ,       a   c   2   )   ,       p   +
0007760    2   *   i   )   ,       s   i   x   )  \r  \t  \t  \t  \t   F
0010000    S   T   (   F   S   B   (   a   c   1   ,       F   D   V   (
0010020    F   L   D   (   a   c   2   ,       b   +   2   *   (   i   -
0010040    1   )   )   ,       a   +   (   i   -   1   )   *   2   )   )
0010060    ,       b   +   i   *   2   )  \r  \t  \t  \t  \t   ]  \r  \t
0010100   \t  \t   ]  \r  \t  \t   i   f   n   o   t       [  \r  \t  \t
0010120   \t   /   /       b   (   0   )   =   6   *   (   p   (   1   )
0010140    -   2   *   p   (   0   )   +   p   (   n   -   2   )   )  \r
0010160   \t  \t  \t   F   S   T   (   F   M   L   (   F   A   D   (   F
0010200    S   B   (   F   S   B   (   F   L   D   (   a   c   1   ,    
0010220  376 001  \0   7 320   p   +   2   )   ,       p   )   ,       p
0010240    )   ,       p   +   2   *   (   n   -   2   )   )   ,       s
0010260    i   x   )   ,       b   )  \r  \r  \t  \t  \t   /   /       b
0010300    (   i   )   =   6   *   (   p   (   i   +   1   )   -   2   *
0010320    p   (   i   )   +   p   (   i   -   1   )   )   -   b   (   i
0010340    -   1   )   /   a   (   i   -   1   )           {   i   =   1
0010360    ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t  \t   f
0010400    o   r       i   =   1       t   o       n   -   3       d   o
0010420        [  \r  \t  \t  \t  \t   F   M   L   (   F   L   D   (   a
0010440    c   2   ,       p   +   2   *   i   )   ,       t   w   o   )
0010460   \r  \t  \t  \t  \t   F   M   L   (   F   A   D   (   F   S   B
0010500    (   F   L   D   (   a   c   1   ,       p   +   2   *   (   i
0010520    +   1   )   )   ,       a   c   2   )   ,       p   +   2   *
0010540    (   i   -   1   )   )   ,       s   i   x   )  \r  \t  \t  \t
0010560   \t   F   S   T   (   F   S   B   (   a   c   1   ,       F   D
0010600    V   (   F   L   D   (   a   c   2   ,       b   +   2   *   (
0010620    i   -   1   )   ) 376 001  \0 375 346   ,       a   +   (   i
0010640    -   1   )   *   2   )   )   ,       b   +   i   *   2   )  \r
0010660   \t  \t  \t  \t   ]  \r  \r  \t  \t  \t   /   /       r   (   n
0010700    -   2   )   =   1           a   n   d           s   (   n   -
0010720    2   )   =   0  \r  \t  \t  \t   F   S   T   (   o   n   e   ,
0010740        r   +   2   *   (   n   -   2   )   )  \r  \t  \t  \t   F
0010760    S   T   (   z   e   r   o   ,       s   +   2   *   (   n   -
0011000    2   )   ,       0   )  \r  \t  \t  \t   /   /       r   (   i
0011020    )   =   -   (   r   (   i   +   1   )   +   c   (   i   )   )
0011040    /   a   (   i   )               {   i   =   n   -   3   ,   .
0011060    .   .   ,   1   ,   0   }  \r  \t  \t  \t   /   /       s   (
0011100    i   )   =   (   b   (   i   )   -   s   (   i   +   1   )   )
0011120    /   a   (   i   )               {   i   =   n   -   3   ,   .
0011140    .   .   ,   1   ,   0   }  \r  \t  \t  \t   f   o   r       i
0011160    =   n   -   3       t   o       0       b   y       -   1    
0011200    d   o       [  \r  \t  \t  \t  \t   F   S   T   (   F   D   V
0011220    (   F   N   E   G   (   F   A   D   ( 376 001  \0 216 211   F
0011240    L   D   (   a   c   1   ,       r   +   2   *   (   i   +   1
0011260    )   )   ,       c   +   2   *   i   )   )   ,       a   +   2
0011300    *   i   )   ,       r   +   2   *   i   )  \r  \t  \t  \t  \t
0011320    F   S   T   (   F   D   V   (   F   S   B   (   F   L   D   (
0011340    a   c   1   ,       b   +   2   *   i   )   ,       s   +   2
0011360    *   (   i   +   1   )   )   ,       a   +   2   *   i   )   ,
0011400        s   +   2   *   i   )  \r  \t  \t  \t  \t   ]  \r  \t  \t
0011420   \t   ]  \r  \r  \t  \t   c   o   m   p   u   t   e   p   2   :
0011440   \r  \t  \t   /   /       C   O   M   P   U   T   E       S   E
0011460    C   O   N   D       D   E   R   I   V   A   T   I   V   E   S
0011500   \r  \t  \t   t   e   s   t       s   p   l   i   n   e   T   y
0011520    p   e       e   q       n   a   t   u   r   a   l   S   p   l
0011540    i   n   e  \r  \t  \t   i   f   s   o       [  \r  \t  \t  \t
0011560    /   /       p   2   (   0   )   =   p   2   (   n   -   1   )
0011600    =   0  \r  \t  \t  \t   F   S   T   (   z   e   r   o   ,    
0011620    p   2   )   ;       F   S   T   (   z   e   r   o   ,     376
0011640  001  \0   F 025   p   2   +   2   *   (   n   -   1   )   )  \r
0011660   \t  \t  \t   /   /       p   2   (   i   )   =   (   b   (   i
0011700    -   1   )   -   p   2   (   i   +   1   )   )   /   a   (   i
0011720    -   1   )           {   i   =       n   -   2   ,   .   .   .
0011740    ,   2   ,   1   }  \r  \t  \t  \t   f   o   r       i   =   n
0011760    -   2       t   o       1       b   y       -   1       d   o
0012000   \r  \t  \t  \t  \t   F   S   T   (   F   D   V   (   F   S   B
0012020    (   F   L   D   (   a   c   1   ,       b   +   2   *   (   i
0012040    -   1   )   )   ,       p   2   +   (   i   +   1   )   *   2
0012060    )   ,       a   +   (   i   -   1   )   *   2   )   ,       p
0012100    2   +   2   *   i   )  \r  \t  \t  \t   ]  \r  \t  \t   i   f
0012120    n   o   t       [  \r  \t  \t  \t   /   /       D   2   =   p
0012140    (   n   -   1   )   -   2   *   p   (   n   -   2   )   +   p
0012160    (   n   -   3   )  \r  \t  \t  \t   /   /       a   c   1   =
0012200    p   2   (   n   -   2   )   =   (   6   *   D   2   -   s   (
0012220    0   )   -   s   (   n   -   3   )   )   /   (   r   (   0   )
0012240    +   r   (   n 376 001  \0 314 210   -   3   )   +   4   )  \r
0012260   \t  \t  \t   F   A   D   (   F   A   D   (   F   L   D   (   a
0012300    c   2   ,       r   )   ,       r   +   2   *   (   n   -   3
0012320    )   )   ,       F   L   D   I   (   a   c   1   ,       4   )
0012340    )  \r  \t  \t  \t   F   A   D   (   F   S   B   (   F   L   D
0012360    (   a   c   1   ,       p   +   2   *   (   n   -   1   )   )
0012400    ,       F   M   L   (   F   L   D   (   a   c   3   ,       p
0012420    +   2   *   (   n   -   2   )   )   ,       t   w   o   )   )
0012440    ,       p   +   2   *   (   n   -   3   )   )  \r  \t  \t  \t
0012460    F   S   T   (   F   D   V   (   F   S   B   (   F   S   B   (
0012500    F   M   L   (   a   c   1   ,       s   i   x   )   ,       s
0012520    )   ,       s   +   2   *   (   n   -   3   )   )   ,       a
0012540    c   2   )   ,       p   2   +   2   *   (   n   -   2   )   )
0012560   \r  \r  \t  \t  \t   /   /       p   2   (   i   )   =   r   (
0012600    i   )   *   p   2   (   n   -   2   )       +       s   (   i
0012620    )               {   i   =   0   ,   1   ,   2   ,   .   .   .
0012640    ,   n   -   3   }  \r  \t  \t  \t 376 001  \0 313 271   f   o
0012660    r       i   =   0       t   o       n   -   3       d   o  \r
0012700   \t  \t  \t  \t   F   S   T   (   F   A   D   (   F   M   L   (
0012720    F   L   D   (   a   c   2   ,       a   c   1   )   ,       r
0012740    +   2   *   i   )   ,       s   +   2   *   i   )   ,       p
0012760    2   +   2   *   i   )  \r  \r  \t  \t  \t   /   /       p   2
0013000    (   n   -   1   )   =   p   2   (   0   )  \r  \t  \t  \t   F
0013020    S   T   (   F   L   D   (   a   c   1   ,       p   2   )   ,
0013040        p   2   +   2   *   (   n   -   1   )   )  \r  \t  \t  \t
0013060    ]  \r  \r  \t  \t   c   o   m   p   u   t   e   p   1   p   3
0013100    :  \r  \t  \t   /   /       C   O   M   P   U   T   E       F
0013120    I   R   S   T       &       T   H   I   R   D       D   E   R
0013140    I   V   A   T   I   V   E   S  \r  \t  \t   /   /       p   1
0013160    (   i   )   =   p   (   i   +   1   )   -   p   (   i   )   -
0013200    (   2   *   p   2   (   i   )   +   p   2   (   i   +   1   )
0013220    )   /   6  \r  \t  \t   /   /       p   3   (   i   )   =   p
0013240    2   (   i   +   1   )   -   p   2   (   i   )         376 001
0013260   \0   G 021   {   i   =   0   ,   1   ,   2   ,   .   .   .   ,
0013300    n   -   2   }  \r  \t  \t   f   o   r       i   =   0       t
0013320    o       n   -   2       d   o       [  \r  \t  \t  \t   F   S
0013340    B   (   F   L   D   (   a   c   1   ,       p   +   2   *   (
0013360    i   +   1   )   )   ,       p   +   2   *   i   )  \r  \t  \t
0013400   \t   F   A   D   (   F   M   L   (   F   L   D   (   a   c   2
0013420    ,       p   2   +   2   *   i   )   ,       t   w   o   )   ,
0013440        p   2   +   (   i   +   1   )   *   2   )  \r  \t  \t  \t
0013460    F   S   T   (   F   S   B   (   a   c   1   ,       F   D   V
0013500    (   a   c   2   ,       s   i   x   )   )   ,       p   1   +
0013520    i   *   2   )  \r  \t  \t  \t   F   S   T   (   F   S   B   (
0013540    F   L   D   (   a   c   1   ,       p   2   +   (   i   +   1
0013560    )   *   2   )   ,       p   2   +   i   *   2   )   ,       p
0013600    3   +   i   *   2   )  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r
0013620   \r  \t   r   e   s   u   l   t   i   s       P   S   q   u   i
0013640    t   (   t   r   u   e   )  \r  \t   ]  \r  \r  \r   a   n   d
0013660        P   S 376 001  \0 241   J   i   n   i   t   (   p   s   v
0013700    )       =       v   a   l   o   f       [  \r  \t   i   f    
0013720    P   S   z   o   n   e       e   q       0       r   e   s   u
0013740    l   t   i   s       P   S   e   r   r   o   r   (   0   )  \r
0013760   \t   P   S   v   e   c   =   p   s   v  \r  \t   Z   e   r   o
0014000    (   P   S   v   e   c   ,       l   P   S   V   E   C   )  \r
0014020   \t   /   /       n   e   w       f   l   o   a   t   i   n   g
0014040        p   o   i   n   t       w   o   r   k       a   r   e   a
0014060   \r  \t   l   e   t       c   n   s   t   =   F   P   w   o   r
0014100    k   !   0   -   4   *   F   P   w   o   r   k   !   1  \r  \t
0014120    l   e   t       F   P   w   o   r   k   N   e   w   =       A
0014140    l   l   o   c   a   t   e   (   P   S   z   o   n   e   ,    
0014160    4   *   n   u   m   F   P   a   c   s   +   c   n   s   t   )
0014200   \r  \t   i   f       F   P   w   o   r   k   N   e   w       e
0014220    q       0       r   e   s   u   l   t   i   s       P   S   e
0014240    r   r   o   r   (   1   )  \r  \t   P   S   v   e   c   >   >
0014260    P   S   V   E   C   .   F   P 376 001  \0   4   H   w   o   r
0014300    k   S   a   v   e   =   F   P   w   o   r   k  \r  \t   P   S
0014320    v   e   c   >   >   P   S   V   E   C   .   F   P   w   o   r
0014340    k   N   e   w   =   F   P   w   o   r   k   N   e   w  \r  \t
0014360    F   P   w   o   r   k   N   e   w   !   1   =   n   u   m   F
0014400    P   a   c   s  \r   /   /  \t   F   P   S   e   t   u   p   (
0014420    F   P   w   o   r   k   N   e   w   )  \r  \t   F   P   w   o
0014440    r   k   =   F   P   w   o   r   k   N   e   w  \r  \t   F   L
0014460    D   I   (   z   e   r   o   ,   0   )   ;       F   L   D   I
0014500    (   o   n   e   ,       1   )   ;       F   L   D   I   (   t
0014520    w   o   ,   2   )   ;       F   L   D   I   (   s   i   x   ,
0014540    6   )  \r  \t   r   e   s   u   l   t   i   s       t   r   u
0014560    e  \r  \t   ]  \r  \r  \r  \r   a   n   d       P   S   a   l
0014600    l   o   c   a   t   e   (   l   o   c   a   t   i   o   n   ,
0014620        m   )       =       v   a   l   o   f       [  \r  \t   l
0014640    e   t       b   =   A   l   l   o   c   a   t   e   (   P   S
0014660    z   o   n   e   ,       m   )  \r  \t   i   f     376 001  \0
0014700    /   U   b       e   q       0       r   e   s   u   l   t   i
0014720    s       P   S   q   u   i   t   (   P   S   e   r   r   o   r
0014740    (   1   )   )  \r  \t   @   l   o   c   a   t   i   o   n   =
0014760    b  \r  \t   r   e   s   u   l   t   i   s       b  \r  \t   ]
0015000   \r  \r  \r  \r   a   n   d       P   S   e   r   r   o   r   (
0015020    e   r   r   o   r   C   o   d   e   ,   a   1   ,   a   2   ,
0015040    a   3   ,   a   4   )       =       v   a   l   o   f       [
0015060   \r  \t   (   t   a   b   l   e   [   #   7   7   4   0   3   ;
0015100        #   1   4   0   1   ]   )       (   "   P   S   .   E   R
0015120    R   O   R   S   "   ,       l   v       e   r   r   o   r   C
0015140    o   d   e   )  \r  \t   r   e   s   u   l   t   i   s       0
0015160   \r  \t   ]  \r  \r  \r   a   n   d       P   S   q   u   i   t
0015200    (   r   e   s   u   l   t   )       =       v   a   l   o   f
0015220        [  \r  \t   i   f       P   S   v   e   c       e   q    
0015240    0       r   e   s   u   l   t   i   s       r   e   s   u   l
0015260    t  \r   /   /  \t   F   P   S   e   t   u   p   (   P   S   v
0015300    e   c 376  \0 261   b   H   >   >   P   S   V   E   C   .   F
0015320    P   w   o   r   k   S   a   v   e   )  \r  \t   F   P   w   o
0015340    r   k   =   P   S   v   e   c   >   >   P   S   V   E   C   .
0015360    F   P   w   o   r   k   S   a   v   e  \r  \t   P   S   v   e
0015400    c   >   >   P   S   V   E   C   .   F   P   w   o   r   k   S
0015420    a   v   e   =   0  \r  \t   f   o   r       i   =   0       t
0015440    o       l   P   S   V   E   C   -   1       d   o       i   f
0015460        P   S   v   e   c   !   i       n   e       0       t   h
0015500    e   n       F   r   e   e   (   P   S   z   o   n   e   ,    
0015520    P   S   v   e   c   !   i   )  \r  \t   P   S   v   e   c   =
0015540    0  \r  \t   r   e   s   u   l   t   i   s       r   e   s   u
0015560    l   t  \r  \t   ]  \r  \r  \r 377  \0  \0   d   z   p   i   n
0015600    i   t   1   .   B   c   p   l  \0 373 226   H 252   2  \0  \0
0015620  376 001  \0   ` 037   /   /       S   e   p   t   e   m   b   e
0015640    r       1   1   ,       1   9   8   0           3   :   5   7
0015660        P   M       b   y       R   a   m   s   h   a   w  \t  \t
0015700    *   *   *       "   U   N   D   E   R   L   A   Y   "       *
0015720    *   *  \r   /   /   E   d   i   t   e   d       b   y       L
0015740    y   l   e       R   a   m   s   h   a   w       S   e   p   t
0015760    e   m   b   e   r       8   ,       1   9   8   0           3
0016000    :   2   4       P   M   :       c   h   a   n   g   e   d    
0016020    h   e   a   d   e   r  \r   /   /           m   e   s   s   a
0016040    g   e       t   o       D   r   a   w       5   .   0   .   .
0016060    .  \r      \r   /   /       C   o   m   p   i   l   e       w
0016100    i   t   h       X   /   M       t   o       s   e   t       v
0016120    e   r   s   i   o   n   X       (   i   .   e   .       n   o
0016140        c   o   l   o   r       m   e   n   u   )       t   o    
0016160    t   r   u   e  \r  \r   g   e   t       "   z   p   D   e   f
0016200    s   .   b   c   p   l   "  \r  \r   g   e   t       "   s   y
0016220    s   D   e   f   s 376 001  \0  \f 006   .   d   "  \r   g   e
0016240    t       "   A   l   t   o   D   e   f   s   .   d   "  \r  \r
0016260   \r   /   /       o   u   t   g   o   i   n   g       p   r   o
0016300    c   e   d   u   r   e   s   :  \r  \r   e   x   t   e   r   n
0016320    a   l       [  \r  \t   d   r   a   w   J   u   n   t   a  \r
0016340   \t   n   e   e   d   B   l   o   c   k  \r  \t   ]  \r        
0016360   \r  \r   /   /       o   u   t   g   o   i   n   g       s   t
0016400    a   t   i   c   s   :  \r  \r   e   x   t   e   r   n   a   l
0016420        [  \r  \t   /   /       o   v   e   r   l   a   y       s
0016440    t   u   f   f  \r  \t   @   o   v   e   r   l   a   y   T   a
0016460    b   l   e  \r  \t   /   /       d   i   s   p   l   a   y    
0016500    a   r   e   a       s   t   u   f   f  \r  \t   @   s   w   i
0016520    t   c   h   D   C   B  \r  \t   @   b   i   t   m   a   p  \r
0016540   \t   @   b   i   t   m   a   p   0   0  \r  \t   @   h   e   i
0016560    g   h   t  \r  \t   @   w   i   d   t   h  \r  \t   @   s   c
0016600    a   n   l   i   n   e   W   i   d   t   h  \r  \t   @   b   i
0016620    t   m   a   p   S   i   z   e  \r  \t 376 001  \0 316 346   @
0016640    X   m   a   x  \r  \t   @   Y   m   a   x  \r  \t   @   X   r
0016660    e   f   0  \r  \t   @   Y   r   e   f   0  \r  \t   @   g   r
0016700    i   d   S   p   a   c   i   n   g  \r  \t   /   /       g   l
0016720    o   b   a   l       t   a   b   l   e   s  \r  \t   @   s   p
0016740    l   i   n   e   T   a   b   l   e  \r  \t   @   t   e   x   t
0016760    T   a   b   l   e  \r  \t   @   f   o   n   t   D   e   f   T
0017000    a   b   l   e  \r  \t   @   f   o   n   t   F   i   l   e  \r
0017020   \t   @   n   e   w   S   p   l   i   n   e   X   Y   t   a   b
0017040    l   e  \r  \t   @   t   r   a   n   s   f   o   r   m   X   Y
0017060    t   a   b   l   e  \r  \t   @   t   r   a   n   s   f   o   r
0017100    m   M   o   d   e   T   a   b   l   e  \r  \t   @   s   e   l
0017120    e   c   t   i   o   n   T   a   b   l   e  \r  \t   @   d   e
0017140    l   e   t   i   o   n   T   a   b   l   e  \r  \t   @   c   o
0017160    m   m   a   n   d   T   a   b   l   e  \r  \t   @   a   c   t
0017200    i   o   n   T   a   b   l   e  \r  \t   @   D   T   T   s   t
0017220    a   c   k  \r  \t   @   D   T   T   s   t   a   c   k   T 376
0017240  001  \0 351 317   o   p  \r  \t   @   f   r   e   e   S   t   o
0017260    r   a   g   e   Z   o   n   e  \r  \t   @   l   i   n   e   T
0017300    h   i   c   k   n   e   s   s   T   a   b   l   e  \r  \t   /
0017320    /       t   a   b   l   e       c   o   u   n   t   e   r   s
0017340   \r  \t   @   m   a   x   S   p   l   i   n   e   I   D  \r  \t
0017360    @   m   a   x   T   e   x   t   I   D  \r  \t   @   m   a   x
0017400    K   n   o   t   s  \r  \t   @   m   a   x   I   t   e   m  \r
0017420   \t   @   m   a   x   D   T   T   s   t   a   c   k  \r  \t   /
0017440    /   t   e   x   t       s   t   u   f   f  \r  \t   @   t   e
0017460    x   t   O   K  \r  \t   @   t   e   x   t   S   t   r   i   n
0017500    g  \r  \t   @   t   e   x   t   W   i   d   t   h  \r  \t   @
0017520    t   e   x   t   T   o   p  \r  \t   @   t   e   x   t   B   o
0017540    t   t   o   m  \r  \t   @   t   e   x   t   H   e   i   g   h
0017560    t  \r  \t   @   t   e   x   t   B   i   t   m   a   p  \r  \t
0017600    @   t   e   x   t   B   i   t   m   a   p   S   i   z   e  \r
0017620   \t   /   /       g   l   o   b   a   l       i   n   f   o   r
0017640    m   a   t   i 376 001  \0 375   A   o   n  \r  \t   @   f   r
0017660    e   e   S   t   o   r   a   g   e   S   i   z   e  \r  \t   @
0017700    f   o   n   t  \r  \t   @   d   s   p   F   o   n   t  \r  \t
0017720    @   d   s   p   F   o   n   t   A   d   d   r   e   s   s  \r
0017740   \t   @   b   r   u   s   h  \r  \t   @   c   o   l   o   r  \r
0017760   \t   @   v   e   r   s   i   o   n   X  \r  \t   ]  \r  \r   s
0020000    t   a   t   i   c       [  \r  \t   /   /       o   v   e   r
0020020    l   a   y       s   t   u   f   f  \r  \t   @   o   v   e   r
0020040    l   a   y   T   a   b   l   e  \r  \t   /   /       d   i   s
0020060    p   l   a   y       a   r   e   a       s   t   u   f   f  \r
0020100   \t   @   s   w   i   t   c   h   D   C   B  \r  \t   @   b   i
0020120    t   m   a   p  \r  \t   @   b   i   t   m   a   p   0   0  \r
0020140   \t   @   h   e   i   g   h   t   =   d   e   f   a   u   l   t
0020160    H   e   i   g   h   t  \r  \t   @   w   i   d   t   h   =   d
0020200    e   f   a   u   l   t   W   i   d   t   h  \r  \t   @   s   c
0020220    a   n   l   i   n   e   W   i   d   t   h  \r  \t   @   b   i
0020240    t   m   a   p   S   i   z   e  \r 376 001  \0 223   u  \t   @
0020260    X   m   a   x  \r  \t   @   Y   m   a   x  \r  \t   @   X   r
0020300    e   f   0  \r  \t   @   Y   r   e   f   0  \r  \t   @   g   r
0020320    i   d   S   p   a   c   i   n   g   =   0  \r  \t   /   /    
0020340    g   l   o   b   a   l       t   a   b   l   e   s  \r  \t   @
0020360    s   p   l   i   n   e   T   a   b   l   e  \r  \t   @   t   e
0020400    x   t   T   a   b   l   e  \r  \t   @   f   o   n   t   D   e
0020420    f   T   a   b   l   e  \r  \t   @   f   o   n   t   F   i   l
0020440    e  \r  \t   @   n   e   w   S   p   l   i   n   e   X   Y   t
0020460    a   b   l   e  \r  \t   @   t   r   a   n   s   f   o   r   m
0020500    X   Y   t   a   b   l   e  \r  \t   @   t   r   a   n   s   f
0020520    o   r   m   M   o   d   e   T   a   b   l   e  \r  \t   @   s
0020540    e   l   e   c   t   i   o   n   T   a   b   l   e  \r  \t   @
0020560    d   e   l   e   t   i   o   n   T   a   b   l   e  \r  \t   @
0020600    c   o   m   m   a   n   d   T   a   b   l   e  \r  \t   @   a
0020620    c   t   i   o   n   T   a   b   l   e  \r  \t   @   D   T   T
0020640    s   t   a   c   k  \r  \t   @   D   T   T   s   t   a 376 001
0020660   \0 246 317   c   k   T   o   p   =   0  \r  \t   @   f   r   e
0020700    e   S   t   o   r   a   g   e   Z   o   n   e  \r  \t   @   l
0020720    i   n   e   T   h   i   c   k   n   e   s   s   T   a   b   l
0020740    e  \r  \t   /   /       t   a   b   l   e       c   o   u   n
0020760    t   e   r   s  \r  \t   @   m   a   x   S   p   l   i   n   e
0021000    I   D   =   0  \r  \t   @   m   a   x   T   e   x   t   I   D
0021020    =   0  \r  \t   @   m   a   x   K   n   o   t   s   =   0  \r
0021040   \t   @   m   a   x   I   t   e   m   =   0  \r  \t   @   m   a
0021060    x   D   T   T   s   t   a   c   k  \r  \t   /   /   t   e   x
0021100    t       s   t   u   f   f  \r  \t   @   t   e   x   t   O   K
0021120    =   0  \r  \t   @   t   e   x   t   S   t   r   i   n   g  \r
0021140   \t   @   t   e   x   t   W   i   d   t   h  \r  \t   @   t   e
0021160    x   t   T   o   p  \r  \t   @   t   e   x   t   B   o   t   t
0021200    o   m  \r  \t   @   t   e   x   t   H   e   i   g   h   t  \r
0021220   \t   @   t   e   x   t   B   i   t   m   a   p  \r  \t   @   t
0021240    e   x   t   B   i   t   m   a   p   S   i   z   e  \r  \t   /
0021260    /       g 376 001  \0 340   *   l   o   b   a   l       i   n
0021300    f   o   r   m   a   t   i   o   n  \r  \t   @   f   r   e   e
0021320    S   t   o   r   a   g   e   S   i   z   e   =   0  \r  \t   @
0021340    f   o   n   t   =   0  \r  \t   @   d   s   p   F   o   n   t
0021360    =   0  \r  \t   @   d   s   p   F   o   n   t   A   d   d   r
0021400    e   s   s   =   0  \r  \t   @   d   e   f   a   u   l   t   F
0021420    o   n   t  \r  \t   @   c   o   l   o   r   =   b   l   a   c
0021440    k  \r  \t   @   b   r   u   s   h   =   4  \t  \t   /   /    
0021460    s   q   u   a   r   e       b   r   u   s   h       i   s    
0021500    t   h   e       d   e   f   a   u   l   t  \r  \t   @   v   e
0021520    r   s   i   o   n   X   =       n   o   t       n   e   w   n
0021540    a   m   e       X  \r  \t   ]  \r  \r  \r   /   /       i   n
0021560    c   o   m   i   n   g       p   r   o   c   e   d   u   r   e
0021600    s   :  \r  \r   e   x   t   e   r   n   a   l       [  \r  \t
0021620    R   e   s   e   t   s  \t  \t  \t   /   /       S   Y   S   T
0021640    E   M  \r  \t   G   e   t   s  \r  \t   E   n   d   o   f   s
0021660   \r  \t   C   l   o   s   e   s 376 001  \0   ^ 263  \r  \t   O
0021700    p   e   n   F   i   l   e  \r  \t   C   r   e   a   t   e   D
0021720    i   s   k   S   t   r   e   a   m  \r  \t   C   r   e   a   t
0021740    e   D   i   s   p   l   a   y   S   t   r   e   a   m  \r  \t
0021760    S   h   o   w   D   i   s   p   l   a   y   S   t   r   e   a
0022000    m  \r  \t   F   i   l   e   L   e   n   g   t   h  \r  \t   F
0022020    i   l   e   P   o   s  \r  \t   S   e   t   F   i   l   e   P
0022040    o   s  \r  \t   P   o   s   i   t   i   o   n   P   a   g   e
0022060   \r  \t   J   u   m   p   T   o   F   a  \r  \t   R   e   a   d
0022100    B   l   o   c   k  \r  \t   S   e   t   B   l   o   c   k  \r
0022120   \t   Z   e   r   o  \r  \t   M   o   v   e   B   l   o   c   k
0022140   \r  \t   D   o   u   b   l   e   A   d   d  \r  \t   U   s   c
0022160   \r  \r  \t   S   e   t   E   n   d   C   o   d   e  \r  \t   J
0022200    u   n   t   a  \r  \r  \t   G   e   t   F   i   x   e   d  \r
0022220   \t   F   i   x   e   d   L   e   f   t  \r  \t   I   n   i   t
0022240    i   a   l   i   z   e   Z   o   n   e  \r  \t   A   l   l   o
0022260    c   a   t   e  \r  \r  \t   i   n   i   t   E   v 376 001  \0
0022300    q 036   e   n   t   T   a   b   l   e  \t  \t   /   /       Z
0022320    P   I   N   I   T   2  \r  \r  \t   d   r   a   w   M   a   i
0022340    n  \t  \t   /   /       Z   P   E   D   I   T  \r  \t   d   r
0022360    a   w   F   i   n   i   s   h  \r  \r  \t   M   a   k   e   F
0022400    o   n   t   E   n   t   r   y  \t  \t   /   /       Z   P   F
0022420    O   N   T   I   O  \r  \r  \t   t   y   p   e   F   o   r   m
0022440   \t  \t   /   /       Z   P   U   T   I   L  \r  \t   F   P   e
0022460    r   r   o   r  \r  \t   e   q   u   a   l  \r  \r  \t   P   S
0022500    e   r   r   o   r  \t  \t  \t   /   /       S   P   L   I   N
0022520    E  \r  \r  \t   g   i   v   e   U   p  \t  \t  \t   /   /    
0022540    Z   P   B   L   O   C   K  \r  \t   C   h   e   c   k   P   S
0022560    e   r   r   o   r  \r  \t   m   a   x   B   l   o   c   k   S
0022600    i   z   e  \r  \r  \t   R   e   a   d   U   s   e   r   C   m
0022620    I   t   e   m  \t  \t   /   /       R   E   A   D   U   S   E
0022640    R   C   M   I   T   E   M  \r  \r  \t   L   o   a   d   P   a
0022660    c   k   e   d   R   A   M  \t  \t   /   /       R   E   A   D
0022700    P   R 376 001  \0   $ 216   A   M  \r  \t   M   i   c   r   o
0022720    F   l   o   a   t   R   a   m   I   m   a   g   e  \r  \t   ]
0022740   \r  \r  \r  \r   /   /       i   n   c   o   m   i   n   g    
0022760    s   t   a   t   i   c   s   :  \r  \r   e   x   t   e   r   n
0023000    a   l       [  \r  \t   @   d   a   s   h   O   n  \t  \t  \t
0023020    /   /       Z   P   D   R   A   W  \r  \t   @   d   a   s   h
0023040    O   f   f  \r  \r  \t   F   P   e   r   r   p   r   i   n   t
0023060   \t  \t   /   /       m   i   c   r   o   F   L   O   A   T  \r
0023100   \r  \t   P   S   z   o   n   e  \t  \t  \t   /   /       P   S
0023120    P   L   I   N   E  \r  \r  \t   @   s   a   m   p   l   e   B
0023140    u   f   f   e   r  \t  \t   /   /       Z   P   F   R   E   E
0023160    H   A   N   D  \r  \t   @   m   a   x   S   a   m   p   l   e
0023200    C   o   u   n   t  \r  \r  \t   d   s   p  \t  \t  \t   /   /
0023220        S   Y   S   T   E   M  \r  \t   s   y   s   Z   o   n   e
0023240   \r  \t   l   v   S   y   s   Z   o   n   e  \r  \t   f   p   S
0023260    y   s   F   o   n   t  \r  \t   l   v   U   s   e   r   F   i
0023300    n   i   s   h   P   r   o 376 001  \0  \t 257   c  \r  \t   O
0023320    s   V   e   r   s   i   o   n  \r  \t   ]  \r  \r  \r   /   /
0023340        l   o   c   a   l       s   t   a   t   i   c   :  \r  \r
0023360    s   t   a   t   i   c       [  \r  \t   @   c   h   e   c   k
0023400    F   r   e   e   S   t   o   r   a   g   e   =   f   a   l   s
0023420    e  \r  \t   @   t   e   m   p   O   v   e   r   l   a   y   T
0023440    a   b   l   e  \r  \t   ]  \r  \r  \r   /   /       d   e   f
0023460    i   n   i   t   i   o   n   s  \r  \r   m   a   n   i   f   e
0023500    s   t       [  \r  \t   /   /       6       l   i   n   e   s
0023520        f   o   r       d   s   p       s   t   r   e   a   m  \r
0023540   \t   n   L   i   n   e   s   =   6  \r  \t   d   s   p   W   i
0023560    d   t   h   =   3   *   3   8  \r  \t   /   /       1       d
0023600    i   s   k       s   t   r   e   a   m  \r  \t   d   i   s   k
0023620    S   t   r   e   a   m   =       l   K   S   +   2   5   6  \r
0023640   \t   s   y   s   t   e   m   P   o   o   l   S   i   z   e   =
0023660    d   i   s   k   S   t   r   e   a   m   +   1   5   0  \r  \t
0023700    /   /       h   o   r   i   z   o   n   t   a 376 001  \0 347
0023720    1   l       m   a   r   g   i   n  \r  \t   h   o   r   M   a
0023740    r   g   i   n   =   1   6  \r  \t   ]  \r  \r  \r  \r   /   /
0023760    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
*
0024060    *  \r   /   /       i   n   i   t   i   a   l   i   z   a   t
0024100    i   o   n       a   n   d       t   h   e       l   i   k   e
0024120   \r   /   /   *   *   *   *   *   *   *   *   *   *   *   *   *
0024140    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
*
0024220    *   *   *   *  \r  \r   l   e   t       d   r   a   w   J   u
0024240    n   t   a   (   l   o   a   d   V   e   c   ,       c   f   a
0024260    )       b   e       [   d   r   a   w   J   u   n   t   a  \r
0024300   \t   /   /       l   o   a   d       &       i   n   i   t   i
0024320    a 376 001  \0   b 273   l   i   z   e       f   l   o   a   t
0024340    i   n   g       p   o   i   n   t       m   i   c   r   o   c
0024360    o   d   e   :  \r   /   /  \t   L   o   a   d   P   a   c   k
0024400    e   d   R   A   M   (   M   i   c   r   o   F   l   o   a   t
0024420    R   a   m   I   m   a   g   e   )  \r  \t   /   /       g   e
0024440    t       o   v   e   r   l   a   y       i   n   f   o   r   m
0024460    a   t   i   o   n       &       s   e   t       E   n   d   C
0024500    o   d   e   :  \r  \t   l   e   t       e   n   d   O   f   C
0024520    o   d   e   =   l   o   a   d   V   e   c   !   (   $   E   -
0024540    $   A   )  \r  \t   t   e   m   p   O   v   e   r   l   a   y
0024560    T   a   b   l   e   =   e   n   d   O   f   C   o   d   e  \r
0024600   \t   e   n   d   O   f   C   o   d   e   =   e   n   d   O   f
0024620    C   o   d   e   +   l   O   V   T  \r  \t   Z   e   r   o   (
0024640    t   e   m   p   O   v   e   r   l   a   y   T   a   b   l   e
0024660    ,       l   O   V   T   )  \r  \t   M   o   v   e   B   l   o
0024700    c   k   (   l   v   (   t   e   m   p   O   v   e   r   l   a
0024720    y   T   a   b   l   e 376 001  \0   g   S   >   >   O   V   T
0024740    .   f   p   )   ,       l   v   (   c   f   a   >   >   C   F
0024760    A   .   f   p   )   ,       l   F   P   )  \r  \t   l   e   t
0025000        r   u   n   F   i   l   e   =   C   r   e   a   t   e   D
0025020    i   s   k   S   t   r   e   a   m   (   l   v   (   c   f   a
0025040    >   >   C   F   A   .   f   p   )   ,       k   s   T   y   p
0025060    e   R   e   a   d   O   n   l   y   )  \r  \t   J   u   m   p
0025100    T   o   F   a   (   r   u   n   F   i   l   e   ,       l   v
0025120    (   c   f   a   >   >   C   F   A   .   f   a   )   )  \r  \t
0025140    l   e   t       p   a   g   e   N   u   m   b   e   r   =   c
0025160    f   a   >   >   C   F   A   .   f   a   .   p   a   g   e   N
0025200    u   m   b   e   r  \r  \t   f   o   r       i   =   1       t
0025220    o       n   u   m   b   e   r   O   f   O   v   e   r   l   a
0025240    y   s       d   o       [  \r  \t  \t   P   o   s   i   t   i
0025260    o   n   P   a   g   e   (   r   u   n   F   i   l   e   ,    
0025300    p   a   g   e   N   u   m   b   e   r   )  \r  \t  \t   t   e
0025320    m   p   O   v   e   r   l   a   y   T   a 376 001  \0 231   #
0025340    b   l   e   >   >   O   V   T   .   p   n   ^   i   =   p   a
0025360    g   e   N   u   m   b   e   r  \r  \t  \t   /   /       4   t
0025400    h       w   o   r   d       o   f       o   v   e   r   l   a
0025420    y       h   e   a   d   e   r       i   s       l   e   n   g
0025440    t   h       (   i   n       w   o   r   d   s   )  \r  \t  \t
0025460    l   e   t       o   v   l   =   v   e   c       1   6  \r  \t
0025500   \t   R   e   a   d   B   l   o   c   k   (   r   u   n   F   i
0025520    l   e   ,       o   v   l   ,       1   6   )  \r  \t  \t   l
0025540    e   t       e   n   d   O   f   O   v   e   r   l   a   y   =
0025560    o   v   l   !   0       +       o   v   l   !   4  \r  \t  \t
0025600    i   f       U   s   c   (   e   n   d   O   f   C   o   d   e
0025620    ,       e   n   d   O   f   O   v   e   r   l   a   y   )    
0025640    e   q       -   1       t   h   e   n  \r  \t  \t  \t   e   n
0025660    d   O   f   C   o   d   e   =   e   n   d   O   f   O   v   e
0025700    r   l   a   y  \r  \t  \t   t   e   m   p   O   v   e   r   l
0025720    a   y   T   a   b   l   e   >   >   O   V   T   .   e   n   d
0025740  376 001  \0   X 311   ^   i   =   e   n   d   O   f   O   v   e
0025760    r   l   a   y  \r  \t  \t   t   e   m   p   O   v   e   r   l
0026000    a   y   T   a   b   l   e   >   >   O   V   T   .   f   r   e
0026020    e   ^   i   =   e   n   d   O   f   C   o   d   e   -   e   n
0026040    d   O   f   O   v   e   r   l   a   y  \r  \t  \t   /   /    
0026060    f   i   l   e       p   a   g   e       n   u   m   b   e   r
0026100        f   o   r       n   e   x   t       o   v   e   r   l   a
0026120    y  \r  \t  \t   p   a   g   e   N   u   m   b   e   r   =   p
0026140    a   g   e   N   u   m   b   e   r       +       (   o   v   l
0026160    !   4   +   2   5   5   )   /   2   5   6  \r  \t  \t   ]  \r
0026200   \t   C   l   o   s   e   s   (   r   u   n   F   i   l   e   )
0026220   \r  \t   S   e   t   E   n   d   C   o   d   e   (   e   n   d
0026240    O   f   C   o   d   e   )  \r  \t   J   u   n   t   a   (   l
0026260    e   v   M   a   i   n   ,       d   r   a   w   I   n   i   t
0026300    )  \r  \t   ]   d   r   a   w   J   u   n   t   a  \r  \r  \r
0026320   \r   a   n   d       d   r   a   w   I   n   i   t   (   )    
0026340    b   e       [   d 376 001  \0   |   h   r   a   w   I   n   i
0026360    t  \r  \t   /   /       m   a   k   e       n   e   w       s
0026400    y   s   t   e   m       z   o   n   e  \r  \t   s   y   s   Z
0026420    o   n   e   =   I   n   i   t   i   a   l   i   z   e   Z   o
0026440    n   e   (   G   e   t   F   i   x   e   d   (   s   y   s   t
0026460    e   m   P   o   o   l   S   i   z   e   )   ,       s   y   s
0026500    t   e   m   P   o   o   l   S   i   z   e   ,       0   ,    
0026520    0   )  \r  \t   @   l   v   S   y   s   Z   o   n   e   =   s
0026540    y   s   Z   o   n   e  \r  \t   /   /       e   r   r   o   r
0026560    s       &       f   i   n   i   s   h  \r  \t   F   P   e   r
0026600    r   p   r   i   n   t   =   F   P   e   r   r   o   r  \r  \t
0026620    P   S   e   r   r   o   r   =   C   h   e   c   k   P   S   e
0026640    r   r   o   r  \r  \t   @       l   v   U   s   e   r   F   i
0026660    n   i   s   h   P   r   o   c   =   d   r   a   w   F   i   n
0026700    i   s   h  \r  \t   /   /       i   n   i   t   i   a   l   i
0026720    z   e       a   l   l       t   h   e       D   R   A   W    
0026740    s   t   u   f   f  \r  \t   l   e   t 376 001  \0 006   m    
0026760    d   c   b   1   =   i   n   i   t   D   i   s   p   l   a   y
0027000    A   n   d   S   t   o   r   a   g   e   (   )  \r  \t   i   n
0027020    i   t   E   v   e   n   t   T   a   b   l   e   (   )  \r  \t
0027040    o   v   e   r   l   a   y   T   a   b   l   e   =   n   e   e
0027060    d   B   l   o   c   k   (   l   O   V   T   )  \r  \t   M   o
0027100    v   e   B   l   o   c   k   (   o   v   e   r   l   a   y   T
0027120    a   b   l   e   ,       t   e   m   p   O   v   e   r   l   a
0027140    y   T   a   b   l   e   ,       l   O   V   T   )  \r  \t   s
0027160    a   m   p   l   e   B   u   f   f   e   r   =   o   v   e   r
0027200    l   a   y   T   a   b   l   e   >   >   O   V   T   .   e   n
0027220    d   ^   f   r   e   e   H   a   n   d   O   v   e   r   l   a
0027240    y  \r  \t   m   a   x   S   a   m   p   l   e   C   o   u   n
0027260    t   =   o   v   e   r   l   a   y   T   a   b   l   e   >   >
0027300    O   V   T   .   f   r   e   e   ^   f   r   e   e   H   a   n
0027320    d   O   v   e   r   l   a   y  \r  \t   i   n   i   t   U   S
0027340    E   R   C   M   (   )  \r  \t   /   /       m   a   k   e 376
0027360  001  \0   W 322       d   i   s   p   l   a   y  \r  \t   l   e
0027400    t       p   t   =   @       l   v   D   i   s   p   l   a   y
0027420    H   e   a   d   e   r  \r  \t   s   w   i   t   c   h   D   C
0027440    B   =   d   c   b   1   >   >   D   C   B   .   n   e   x   t
0027460   \r  \t   d   c   b   1   >   >   D   C   B   .   n   e   x   t
0027500    =   p   t  \r  \t   w   h   i   l   e       p   t   >   >   D
0027520    C   B   .   n   e   x   t       d   o       p   t   =   p   t
0027540    >   >   D   C   B   .   n   e   x   t  \r  \t   p   t   >   >
0027560    D   C   B   .   n   e   x   t   =   s   w   i   t   c   h   D
0027600    C   B  \r  \t   @       l   v   D   i   s   p   l   a   y   H
0027620    e   a   d   e   r   =   d   c   b   1  \r  \t   /   /   n   o
0027640    w       t   h   e       m   a   g   i   c       n   u   m   b
0027660    e   r   s   !  \r  \t   X   m   a   x   ,   Y   m   a   x   =
0027700    w   i   d   t   h   -   1   ,   h   e   i   g   h   t   -   1
0027720   \r  \t   X   r   e   f   0   =   6   4  \r  \t   Y   r   e   f
0027740    0   =   h   e   i   g   h   t       +       2   *   h   o   r
0027760    M   a   r   g 376 001  \0 246 344   i   n       +       n   L
0030000    i   n   e   s   *   (   (   @   (   d   s   p   F   o   n   t
0030020    A   d   d   r   e   s   s   -   2   )   +   1   )   &   #   1
0030040    7   7   7   7   6   )  \r  \t   /   /       v   i   d   e   o
0030060        c   a   m   e   r   a  \r  \t   i   f       c   a   m   e
0030100    r   a   >   >   C   A   M   E   R   A   .   p   r   e   s   e
0030120    n   t       t   h   e   n       [  \r  \t  \t   c   a   m   e
0030140    r   a   >   >   C   A   M   E   R   A   .   t   o   p   =   Y
0030160    r   e   f   0   -   h   e   i   g   h   t   +   c   a   m   e
0030200    r   a   Y   o   f   f   s   e   t  \r  \t  \t   c   a   m   e
0030220    r   a   >   >   C   A   M   E   R   A   .   b   o   t   t   o
0030240    m   =   Y   r   e   f   0   +   c   a   m   e   r   a   Y   o
0030260    f   f   s   e   t  \r  \t  \t   c   a   m   e   r   a   >   >
0030300    C   A   M   E   R   A   .   l   e   f   t   =   X   r   e   f
0030320    0   +   c   a   m   e   r   a   X   o   f   f   s   e   t  \r
0030340   \t  \t   c   a   m   e   r   a   >   >   C   A   M   E   R   A
0030360    .   r   i   g   h   t   =   X   r 376 001  \0 021  \f   e   f
0030400    0   +   w   i   d   t   h   +   c   a   m   e   r   a   X   o
0030420    f   f   s   e   t  \r  \t  \t   c   a   m   e   r   a   >   >
0030440    C   A   M   E   R   A   .   i   n   s   i   d   e   M   o   d
0030460    e   =   a   l   t   o   O   n   l   y  \r  \t  \t   c   a   m
0030500    e   r   a   >   >   C   A   M   E   R   A   .   o   u   t   s
0030520    i   d   e   M   o   d   e   =   a   l   t   o   O   n   l   y
0030540   \r  \t  \t   ]  \r  \t   /   /       a   l   l       s   e   t
0030560   \r  \t   m   a   x   B   l   o   c   k   S   i   z   e   (   )
0030600   \r  \t   d   r   a   w   M   a   i   n   (   )  \r  \t   ]   d
0030620    r   a   w   I   n   i   t  \r  \r  \r  \r   a   n   d       i
0030640    n   i   t   D   i   s   p   l   a   y   A   n   d   S   t   o
0030660    r   a   g   e   (   )       =       v   a   l   o   f       [
0030700    i   n   i   t   D   i   s   p   l   a   y   A   n   d   S   t
0030720    o   r   a   g   e  \r  \t   /   /       g   e   t       b   i
0030740    g       b   l   o   c   k       f   o   r       d   i   s   p
0030760    l   a   y  \r  \t   /   /       d   i   s   p   l   a 376 001
0031000   \0     216   y       a   r   e   a       i   s       w   i   d
0031020    t   h       *       h   e   i   g   h   t       w   i   t   h
0031040        a       4   *   1   6       b   i   t       m   a   r   g
0031060    i   n  \r  \t  \t   h   e   i   g   h   t   =   d   e   f   a
0031100    u   l   t   H   e   i   g   h   t  \r  \t  \t   w   i   d   t
0031120    h   =   d   e   f   a   u   l   t   W   i   d   t   h  \r  \t
0031140    [       s   c   a   n   l   i   n   e   W   i   d   t   h   =
0031160    w   i   d   t   h   /   1   6       +       m   a   r   g   i
0031200    n  \r  \t           b   i   t   m   a   p   S   i   z   e   =
0031220    h   e   i   g   h   t   *   s   c   a   n   l   i   n   e   W
0031240    i   d   t   h  \r  \t           b   i   t   m   a   p   =   G
0031260    e   t   F   i   x   e   d   (   b   i   t   m   a   p   S   i
0031300    z   e   +   1   )  \r  \t           i   f       b   i   t   m
0031320    a   p       b   r   e   a   k  \r  \t           w   i   d   t
0031340    h   =   w   i   d   t   h   -   3   2  \r  \t       ]       r
0031360    e   p   e   a   t  \r  \t   /   /       m   u   s   t       b
0031400    e       a 376 001  \0 212   H   n       e   v   e   n       l
0031420    o   c   a   t   i   o   n   ,       d   a   m   n       i   t
0031440    !  \r  \t   b   i   t   m   a   p   =   (   b   i   t   m   a
0031460    p   +   1   )       &       #   1   7   7   7   7   6  \r  \t
0031500    b   i   t   m   a   p   0   0   =   b   i   t   m   a   p    
0031520    +       b   i   t   m   a   p   S   i   z   e       -       s
0031540    c   a   n   l   i   n   e   W   i   d   t   h       +       m
0031560    a   r   g   i   n  \r  \t   Z   e   r   o   (   b   i   t   m
0031600    a   p   ,       b   i   t   m   a   p   S   i   z   e   )  \r
0031620   \r  \t   /   /       g   e   t       t   h   e       r   e   m
0031640    a   i   n   d   e   r       f   o   r       f   r   e   e    
0031660    s   t   o   r   a   g   e       z   o   n   e  \r  \t   f   r
0031700    e   e   S   t   o   r   a   g   e   S   i   z   e   =   F   i
0031720    x   e   d   L   e   f   t   (   )       -       1   3   0   0
0031740   \r  \t   f   r   e   e   S   t   o   r   a   g   e   Z   o   n
0031760    e   =   G   e   t   F   i   x   e   d   (   f   r   e   e   S
0032000    t   o   r   a   g   e   S   i 376 001  \0   [ 303   z   e   )
0032020   \r  \t   t   e   s   t       c   h   e   c   k   F   r   e   e
0032040    S   t   o   r   a   g   e  \r  \t   i   f   s   o       I   n
0032060    i   t   i   a   l   i   z   e   Z   o   n   e   (   f   r   e
0032100    e   S   t   o   r   a   g   e   Z   o   n   e   ,       f   r
0032120    e   e   S   t   o   r   a   g   e   S   i   z   e   ,       0
0032140    )  \r  \t   i   f   n   o   t       I   n   i   t   i   a   l
0032160    i   z   e   Z   o   n   e   (   f   r   e   e   S   t   o   r
0032200    a   g   e   Z   o   n   e   ,       f   r   e   e   S   t   o
0032220    r   a   g   e   S   i   z   e   ,       0   ,       0   )  \r
0032240   \t   P   S   z   o   n   e   =   f   r   e   e   S   t   o   r
0032260    a   g   e   Z   o   n   e  \r  \r  \t   t   e   x   t   B   i
0032300    t   m   a   p   S   i   z   e   =   m   a   x   T   e   x   t
0032320    H   e   i   g   h   t   *   s   c   a   n   l   i   n   e   W
0032340    i   d   t   h  \r  \t   t   e   x   t   B   i   t   m   a   p
0032360    =   n   e   e   d   E   v   e   n   B   l   o   c   k   (   t
0032400    e   x   t   B   i   t   m   a   p   S   i   z   e 376 001  \0
0032420    R   v   )  \r  \t   Z   e   r   o   (   t   e   x   t   B   i
0032440    t   m   a   p   ,       t   e   x   t   B   i   t   m   a   p
0032460    S   i   z   e   )  \r  \r  \t   /   /   g   e   t       d   i
0032500    s   p   l   a   y       c   o   n   t   r   o   l       b   l
0032520    o   c   k   s  \r  \t   l   e   t       D   C   B   1   =   n
0032540    e   e   d   E   v   e   n   B   l   o   c   k   (   5   *   l
0032560    D   C   B   )  \r  \t   l   e   t       D   C   B   2   =   D
0032600    C   B   1   +   l   D   C   B  \r  \t   l   e   t       D   C
0032620    B   3   =   D   C   B   2   +   l   D   C   B  \r  \t   l   e
0032640    t       D   C   B   4   =   D   C   B   3   +   l   D   C   B
0032660   \r  \t   l   e   t       D   C   B   5   =   D   C   B   4   +
0032700    l   D   C   B  \r  \r  \t   /   /   s   e   t       u   p    
0032720    d   i   s   p   l   a   y       c   o   n   t   r   o   l    
0032740    b   l   o   c   k   s  \r  \t   Z   e   r   o   (   D   C   B
0032760    1   ,       5   *   l   D   C   B   )  \r  \t  \t   /   /   t
0033000    o   p       m   a   r   g   i   n  \r  \t   D   C   B   1   >
0033020    >   D 376 001  \0   & 327   C   B   .   h   e   i   g   h   t
0033040    =   h   o   r   M   a   r   g   i   n   /   2  \r  \t  \t   /
0033060    /   s   y   s   t   e   m       d   i   s   p   l   a   y    
0033100    a   r   e   a       (   f   o   r       m   e   s   s   a   g
0033120    e   s   )  \r  \t  \t   /   /   s   e   c   o   n   d       t
0033140    o   p       m   a   r   g   i   n  \r  \t   D   C   B   2   >
0033160    >   D   C   B   .   h   e   i   g   h   t   =   h   o   r   M
0033200    a   r   g   i   n   /   2  \r  \t  \t   /   /   c   u   r   v
0033220    e       a   r   e   a       &       m   a   r   g   i   n  \r
0033240   \t   D   C   B   3   >   >   D   C   B   .   b   i   t   m   a
0033260    p   =   b   i   t   m   a   p  \r  \t   D   C   B   3   >   >
0033300    D   C   B   .   w   i   d   t   h   =   s   c   a   n   l   i
0033320    n   e   W   i   d   t   h  \r  \t   D   C   B   3   >   >   D
0033340    C   B   .   h   e   i   g   h   t   =   h   e   i   g   h   t
0033360    /   2  \r  \t  \t   /   /       a   n   o   t   h   e   r    
0033400    m   a   r   g   i   n  \r  \t   D   C   B   4   >   >   D   C
0033420    B   .   h   e   i   g   h 376 001  \0 274 261   t   =   h   o
0033440    r   M   a   r   g   i   n   /   2  \r  \t  \t   /   /       t
0033460    e   x   t       d   i   s   p   l   a   y  \r  \t   D   C   B
0033500    5   >   >   D   C   B   .   i   n   d   e   n   t   a   t   i
0033520    o   n   =   4  \r  \t   D   C   B   5   >   >   D   C   B   .
0033540    h   e   i   g   h   t   =   m   a   x   T   e   x   t   H   e
0033560    i   g   h   t   /   2  \r  \t   D   C   B   5   >   >   D   C
0033600    B   .   b   i   t   m   a   p   =   t   e   x   t   B   i   t
0033620    m   a   p  \r  \t   D   C   B   5   >   >   D   C   B   .   w
0033640    i   d   t   h   =   s   c   a   n   l   i   n   e   W   i   d
0033660    t   h  \r  \t  \t   /   /   l   i   n   k       D   C   B   s
0033700   \r  \t   D   C   B   1   >   >   D   C   B   .   n   e   x   t
0033720    =   D   C   B   2  \r  \t   D   C   B   2   >   >   D   C   B
0033740    .   n   e   x   t   =   D   C   B   3  \r  \t   D   C   B   3
0033760    >   >   D   C   B   .   n   e   x   t   =   D   C   B   4  \r
0034000   \t   D   C   B   4   >   >   D   C   B   .   n   e   x   t   =
0034020    D   C   B   5  \r  \t   D   C   B   5   >   > 376 001  \0 241
0034040  207   D   C   B   .   n   e   x   t   =   0  \r  \r  \t   /   /
0034060        d   e   c   i   d   e       a   b   o   u   t       t   h
0034100    e       s   i   z   e       o   f       t   a   b   l   e   s
0034120   \r  \t   r   e   a   d   C   O   M   C   M   p   a   r   a   m
0034140    e   t   e   r   s   (   )  \r  \t   l   e   t       g   r   i
0034160    d   S   p   a   c   D   e   f   =       v   e   r   s   i   o
0034200    n   X       ?       X   g   r   i   d   S   p   a   c   i   n
0034220    g   D   e   f   a   u   l   t   ,       g   r   i   d   S   p
0034240    a   c   i   n   g   D   e   f   a   u   l   t  \r  \t   i   f
0034260        m   a   x   S   p   l   i   n   e   I   D       l   e    
0034300    0       %       m   a   x   S   p   l   i   n   e   I   D    
0034320    g   r       1   0   *   m   a   x   S   p   l   i   n   e   I
0034340    D   d   e   f   a   u   l   t       t   h   e   n  \r  \t  \t
0034360    m   a   x   S   p   l   i   n   e   I   D   =   m   a   x   S
0034400    p   l   i   n   e   I   D   d   e   f   a   u   l   t  \r  \t
0034420    i   f       m   a   x   T   e   x   t   I   D       l   e    
0034440    0 376 001  \0 261 025       %       m   a   x   T   e   x   t
0034460    I   D       g   r       1   0   *   m   a   x   T   e   x   t
0034500    I   D   d   e   f   a   u   l   t       t   h   e   n  \r  \t
0034520   \t   m   a   x   T   e   x   t   I   D   =   m   a   x   T   e
0034540    x   t   I   D   d   e   f   a   u   l   t  \r  \t   i   f    
0034560    m   a   x   K   n   o   t   s       l   e       0       %    
0034600    m   a   x   K   n   o   t   s       g   r       1   0   *   m
0034620    a   x   K   n   o   t   s   D   e   f   a   u   l   t       t
0034640    h   e   n  \r  \t  \t   m   a   x   K   n   o   t   s   =   m
0034660    a   x   K   n   o   t   s   D   e   f   a   u   l   t  \r  \t
0034700    i   f       d   a   s   h   O   n       l   e       0       %
0034720        d   a   s   h   O   n       g   r       1   0   *   d   a
0034740    s   h   O   n   D   e   f   a   u   l   t       t   h   e   n
0034760   \r  \t  \t   d   a   s   h   O   n   =   d   a   s   h   O   n
0035000    D   e   f   a   u   l   t  \r  \t   i   f       d   a   s   h
0035020    O   f   f       l   e       0       %       d   a   s   h   O
0035040    f   f       g   r     376 001  \0 211 262   1   0   *   d   a
0035060    s   h   O   f   f   D   e   f   a   u   l   t       t   h   e
0035100    n  \r  \t  \t   d   a   s   h   O   f   f   =   d   a   s   h
0035120    O   f   f   D   e   f   a   u   l   t  \r  \t   i   f       g
0035140    r   i   d   S   p   a   c   i   n   g       l   e       0    
0035160    %       g   r   i   d   S   p   a   c   i   n   g       g   r
0035200        1   0   *   g   r   i   d   S   p   a   c   D   e   f    
0035220    t   h   e   n  \r  \t  \t   g   r   i   d   S   p   a   c   i
0035240    n   g   =   g   r   i   d   S   p   a   c   D   e   f  \r  \t
0035260    m   a   x   I   t   e   m   =   m   a   x   S   p   l   i   n
0035300    e   I   D       +       m   a   x   T   e   x   t   I   D  \r
0035320   \t   m   a   x   D   T   T   s   t   a   c   k   =   m   a   x
0035340    I   t   e   m       +       2   *   m   a   x   T   r   a   n
0035360    s   f   P   o   i   n   t   s       +       1  \r  \r  \t   /
0035400    /       s   p   l   i   n   e       t   a   b   l   e       [
0035420    l   e   n   g   t   h       m   a   x   S   p   l   i   n   e
0035440    I   D   +   1   ]       &       t   e   x 376 001  \0 301  \v
0035460    t       t   a   b   l   e       [   l   e   n   g   t   h    
0035500    m   a   x   T   e   x   t   I   D   +   1   ]       :  \r  \t
0035520    /   /  \t   w   o   r   d       0       i   s       a       c
0035540    o   u   n   t   e   r  \r  \t   /   /  \t   w   o   r   d   s
0035560        1       t   h   r   o   u   g   h       m   a   x   S   p
0035600    l   i   n   e   I   D       (   m   a   x   T   e   x   t   I
0035620    D   )       a   r   e       p   o   i   n   t   e   r   s  \r
0035640   \t   /   /  \t  \t   t   o       S   P   L   I   N   E       (
0035660    T   E   X   T   )       s   t   r   u   c   t   u   r   e   s
0035700   \r  \t   l   e   t       b   l   o   c   k   S   i   z   e   =
0035720    (   m   a   x   S   p   l   i   n   e   I   D   +   1   )   +
0035740    (   m   a   x   T   e   x   t   I   D   +   1   )   +   (   m
0035760    a   x   C   h   a   r   /   2   +   1   )  \r  \t   s   p   l
0036000    i   n   e   T   a   b   l   e   =   n   e   e   d   B   l   o
0036020    c   k   (   b   l   o   c   k   S   i   z   e   )  \r  \t   Z
0036040    e   r   o   (   s   p   l   i   n   e   T   a   b   l   e   ,
0036060  376 001  \0   p   k       b   l   o   c   k   S   i   z   e   )
0036100   \r  \t   t   e   x   t   T   a   b   l   e   =   s   p   l   i
0036120    n   e   T   a   b   l   e   +   m   a   x   S   p   l   i   n
0036140    e   I   D   +   1  \r  \t   t   e   x   t   S   t   r   i   n
0036160    g   =   t   e   x   t   T   a   b   l   e   +   m   a   x   T
0036200    e   x   t   I   D   +   1  \r  \r  \t   /   /       X   Y    
0036220    t   a   b   l   e   s       f   o   r       n   e   w       s
0036240    p   l   i   n   e       &       t   r   a   n   s   f   o   r
0036260    m   ,       a   n   d       t   r   a   n   s   f   o   r   m
0036300        m   o   d   e       t   a   b   l   e  \r  \t   b   l   o
0036320    c   k   S   i   z   e   =   t   r   a   n   s   f   o   r   m
0036340    M   o   d   e   M   a   x   +   T   R   A   N   S   F   O   R
0036360    M   t   a   b   l   e   S   i   z   e   +   (   2   +   m   a
0036400    x   K   n   o   t   s   *   2   )  \r  \t   t   r   a   n   s
0036420    f   o   r   m   M   o   d   e   T   a   b   l   e   =   n   e
0036440    e   d   B   l   o   c   k   (   b   l   o   c   k   S   i   z
0036460    e   )  \r  \t   t 376 001  \0   y 274   r   a   n   s   f   o
0036500    r   m   X   Y   t   a   b   l   e   =   t   r   a   n   s   f
0036520    o   r   m   M   o   d   e   T   a   b   l   e   +   t   r   a
0036540    n   s   f   o   r   m   M   o   d   e   M   a   x  \r  \t   n
0036560    e   w   S   p   l   i   n   e   X   Y   t   a   b   l   e   =
0036600    t   r   a   n   s   f   o   r   m   X   Y   t   a   b   l   e
0036620    +   T   R   A   N   S   F   O   R   M   t   a   b   l   e   S
0036640    i   z   e  \r  \t   Z   e   r   o   (   t   r   a   n   s   f
0036660    o   r   m   M   o   d   e   T   a   b   l   e   ,       b   l
0036700    o   c   k   S   i   z   e   )  \r  \t   t   r   a   n   s   f
0036720    o   r   m   M   o   d   e   T   a   b   l   e   !   0   =   m
0036740    T   r   a   n   s   f   2   M   o   d   e  \r  \t   t   r   a
0036760    n   s   f   o   r   m   M   o   d   e   T   a   b   l   e   !
0037000    1   =   c   T   r   a   n   s   f   2   M   o   d   e  \r  \t
0037020    t   r   a   n   s   f   o   r   m   M   o   d   e   T   a   b
0037040    l   e   !   2   =   m   T   r   a   n   s   f   4   M   o   d
0037060    e  \r  \t   t   r   a   n   s   f   o 376 001  \0   9 305   r
0037100    m   M   o   d   e   T   a   b   l   e   !   3   =   c   T   r
0037120    a   n   s   f   4   M   o   d   e  \r  \t   t   r   a   n   s
0037140    f   o   r   m   M   o   d   e   T   a   b   l   e   !   4   =
0037160    m   T   r   a   n   s   f   6   M   o   d   e  \r  \t   t   r
0037200    a   n   s   f   o   r   m   M   o   d   e   T   a   b   l   e
0037220    !   5   =   c   T   r   a   n   s   f   6   M   o   d   e  \r
0037240   \r  \t   /   /       s   e   l   e   c   t   i   o   n   /   d
0037260    e   l   e   t   i   o   n       t   a   b   l   e   :  \r  \t
0037300    b   l   o   c   k   S   i   z   e   =   2   *   m   a   x   I
0037320    t   e   m   +   2  \r  \t   s   e   l   e   c   t   i   o   n
0037340    T   a   b   l   e   =   n   e   e   d   B   l   o   c   k   (
0037360    b   l   o   c   k   S   i   z   e   )  \r  \t   Z   e   r   o
0037400    (   s   e   l   e   c   t   i   o   n   T   a   b   l   e   ,
0037420        b   l   o   c   k   S   i   z   e   )  \r  \t   d   e   l
0037440    e   t   i   o   n   T   a   b   l   e   =   s   e   l   e   c
0037460    t   i   o   n   T   a   b   l   e   +   m   a   x   I   t 376
0037500  001  \0   _   ,   e   m   +   1  \r  \r  \t   /   /       s   t
0037520    a   c   k       f   o   r       d   e   l   e   t   e   d    
0037540    i   t   e   m   s  \r  \t   D   T   T   s   t   a   c   k   =
0037560    n   e   e   d   B   l   o   c   k   (   m   a   x   D   T   T
0037600    s   t   a   c   k   )  \r  \r   /   /  \t   l   e   t       F
0037620    P   a   c   s   =   n   e   e   d   B   l   o   c   k   (   4
0037640    *   3   2   +   1   )  \r   /   /  \t   F   P   a   c   s   !
0037660    0   =   3   2  \r   /   /  \t   F   P   S   e   t   u   p   (
0037700    F   P   a   c   s   )  \r   /   /  \r  \t   r   e   s   u   l
0037720    t   i   s       D   C   B   1  \r  \t   ]   i   n   i   t   D
0037740    i   s   p   l   a   y   A   n   d   S   t   o   r   a   g   e
0037760   \r  \r  \r  \r   a   n   d       n   e   e   d   B   l   o   c
0040000    k   (   n   )       =       v   a   l   o   f       [  \r  \t
0040020    l   e   t       b   =   A   l   l   o   c   a   t   e   (   f
0040040    r   e   e   S   t   o   r   a   g   e   Z   o   n   e   ,    
0040060    n   )  \r  \t   u   n   l   e   s   s       b       f   i   n
0040100    i   s   h  \r 376 001  \0   l 200  \t   r   e   s   u   l   t
0040120    i   s       b  \r  \t   ]  \r  \r  \r   a   n   d       n   e
0040140    e   d   E   v   e   n   B   l   o   c   k   (   n   )       =
0040160        v   a   l   o   f       [  \r  \t   l   e   t       b   =
0040200    A   l   l   o   c   a   t   e   (   f   r   e   e   S   t   o
0040220    r   a   g   e   Z   o   n   e   ,       n   ,       -   1   ,
0040240        t   r   u   e   )  \r  \t   u   n   l   e   s   s       b
0040260        f   i   n   i   s   h  \r  \t   r   e   s   u   l   t   i
0040300    s       b  \r  \t   ]  \r  \r  \r   a   n   d       r   e   a
0040320    d   C   O   M   C   M   p   a   r   a   m   e   t   e   r   s
0040340    (   )       b   e       [  \r  \t   /   /       (   s   i   m
0040360    p   l   e       m   i   n   d   e   d       s   c   a   n   n
0040400    i   n   g       o   f       C   O   M   .   C   M   )  \r  \t
0040420    l   e   t       c   o   m   c   m   =   O   p   e   n   F   i
0040440    l   e   (   "   C   O   M   .   C   M   "   ,       k   s   T
0040460    y   p   e   R   e   a   d   O   n   l   y   ,       c   h   a
0040500    r   I   t   e   m   )  \r  \t   l 376 001  \0   b 023   e   t
0040520        n   u   m   b   e   r   ,       s   a   v   e   d   N   u
0040540    m   b   e   r   =       0   ,   0  \r  \t   u   n   t   i   l
0040560        E   n   d   o   f   s   (   c   o   m   c   m   )       d
0040600    o       [  \r  \t  \t   l   e   t       c   =   G   e   t   s
0040620    (   c   o   m   c   m   )  \r  \t  \t   i   f       (   c    
0040640    g   e       $   0   )       &       (   c       l   e       $
0040660    9   )       t   h   e   n       [  \r  \t  \t  \t   n   u   m
0040700    b   e   r   =       n   u   m   b   e   r   *   1   0       +
0040720        (   c   -   $   0   )  \r  \t  \t  \t   l   o   o   p  \r
0040740   \t  \t  \t   ]  \r  \t  \t   s   w   i   t   c   h   o   n    
0040760    c       i   n   t   o       [  \r  \t  \t   c   a   s   e    
0041000    $   /   :       s   a   v   e   d   N   u   m   b   e   r   =
0041020    n   u   m   b   e   r   ;       n   u   m   b   e   r   =   0
0041040    ;       e   n   d   c   a   s   e  \r  \t  \t   c   a   s   e
0041060        $   d   :  \r  \t  \t   c   a   s   e       $   D   :    
0041100    d   a   s   h   O   n   =   s   a   v   e   d   N   u 376 001
0041120   \0 252 035   m   b   e   r   ;       e   n   d   c   a   s   e
0041140   \r  \t  \t   c   a   s   e       $   o   :  \r  \t  \t   c   a
0041160    s   e       $   O   :       d   a   s   h   O   f   f   =   s
0041200    a   v   e   d   N   u   m   b   e   r   ;       e   n   d   c
0041220    a   s   e  \r  \t  \t   c   a   s   e       $   k   :  \r  \t
0041240   \t   c   a   s   e       $   K   :       m   a   x   K   n   o
0041260    t   s   =   s   a   v   e   d   N   u   m   b   e   r   ;    
0041300    e   n   d   c   a   s   e  \r  \t  \t   c   a   s   e       $
0041320    g   :  \r  \t  \t   c   a   s   e       $   G   :       g   r
0041340    i   d   S   p   a   c   i   n   g   =   s   a   v   e   d   N
0041360    u   m   b   e   r   ;       e   n   d   c   a   s   e  \r  \t
0041400   \t   c   a   s   e       $   s   :  \r  \t  \t   c   a   s   e
0041420        $   S   :       m   a   x   S   p   l   i   n   e   I   D
0041440    =   s   a   v   e   d   N   u   m   b   e   r   ;       e   n
0041460    d   c   a   s   e  \r  \t  \t   c   a   s   e       $   t   :
0041500   \r  \t  \t   c   a   s   e       $   T   :       m   a   x   T
0041520    e   x   t 376 001  \0 366 030   I   D   =   s   a   v   e   d
0041540    N   u   m   b   e   r   ;       e   n   d   c   a   s   e  \r
0041560   \t  \t   d   e   f   a   u   l   t   :       s   a   v   e   d
0041600    N   u   m   b   e   r   =   0   ;       n   u   m   b   e   r
0041620    =   0   ;       e   n   d   c   a   s   e  \r  \t  \t  \t   ]
0041640   \r  \t  \t   ]  \r  \t   C   l   o   s   e   s   (   c   o   m
0041660    c   m   )  \r  \t   ]  \r  \r  \r  \r   a   n   d       i   n
0041700    i   t   U   S   E   R   C   M   (   )       b   e       [   i
0041720    n   i   t   U   S   E   R   C   M  \r  \t   /   /       m   a
0041740    k   e       f   o   n   t       &       l   i   n   e   T   h
0041760    i   c   k   n   e   s   s       t   a   b   l   e   s       f
0042000    r   o   m       U   S   E   R   .   C   M       e   n   t   r
0042020    i   e   s  \r  \t   l   e   t       b   l   o   c   k   S   i
0042040    z   e   =   F   O   N   T   F   I   L   E   l   e   n   g   t
0042060    h   +   m   a   x   F   o   n   t   *   (   F   O   N   T   D
0042100    E   F   l   e   n   g   t   h   +   1   )   +   4  \r  \t   l
0042120    i   n   e   T   h   i   c   k 376 001  \0 266 371   n   e   s
0042140    s   T   a   b   l   e   =   n   e   e   d   B   l   o   c   k
0042160    (   b   l   o   c   k   S   i   z   e   )  \r  \t   Z   e   r
0042200    o   (   l   i   n   e   T   h   i   c   k   n   e   s   s   T
0042220    a   b   l   e   ,       b   l   o   c   k   S   i   z   e   )
0042240   \r  \t   f   o   n   t   F   i   l   e   =   l   i   n   e   T
0042260    h   i   c   k   n   e   s   s   T   a   b   l   e   +   4  \r
0042300   \t   f   o   n   t   D   e   f   T   a   b   l   e   =   f   o
0042320    n   t   F   i   l   e   +   F   O   N   T   F   I   L   E   l
0042340    e   n   g   t   h  \r  \t   f   o   r       f   =   0       t
0042360    o       m   a   x   F   o   n   t   -   1       d   o       f
0042400    o   n   t   D   e   f   T   a   b   l   e   !   f   =   f   o
0042420    n   t   D   e   f   T   a   b   l   e   +   m   a   x   F   o
0042440    n   t   +   f   *   F   O   N   T   D   E   F   l   e   n   g
0042460    t   h  \r  \r  \t   /   /       g   e   t       s   t   u   f
0042500    f       f   r   o   m       U   s   e   r   .   C   M       (
0042520    f   o   n   t       n   a   m   e   s   ,       l 376 001  \0
0042540  233 225   i   n   e       t   h   i   c   k   n   e   s   s   )
0042560   \r  \t   l   e   t       f   o   n   t   N   a   m   e   s   V
0042600    e   c   =   v   e   c       1   0   *   m   a   x   F   o   n
0042620    t  \r  \t   Z   e   r   o   (   f   o   n   t   N   a   m   e
0042640    s   V   e   c   ,       1   0   *   m   a   x   F   o   n   t
0042660    )  \r  \t   l   e   t       f   o   n   t   N   a   m   e   s
0042700    =   v   e   c       m   a   x   F   o   n   t  \r  \t   f   o
0042720    r       f   =   0       t   o       m   a   x   F   o   n   t
0042740    -   1       d   o       f   o   n   t   N   a   m   e   s   !
0042760    f   =   f   o   n   t   N   a   m   e   s   V   e   c   +   1
0043000    0   *   f  \r  \t   l   e   t       f   o   n   t   S   e   t
0043020    =   v   e   c       m   a   x   F   o   n   t  \r  \t   Z   e
0043040    r   o   (   f   o   n   t   S   e   t   ,       m   a   x   F
0043060    o   n   t   )  \r  \t   r   e   a   d   U   S   E   R   C   M
0043100    (   f   o   n   t   S   e   t   ,       f   o   n   t   N   a
0043120    m   e   s   )  \r  \r  \t   /   /       r   e   a   d       f
0043140    o   n 376 001  \0 226   $   t   s  \r  \t   f   o   n   t   =
0043160    -   1  \r  \t   f   o   r       f   =   0       t   o       m
0043200    a   x   F   o   n   t   -   1       d   o       [  \r  \t  \t
0043220    i   f       f   o   n   t   F   i   l   e   I   n   i   t   (
0043240    f   o   n   t   S   e   t   !   f   ,       f   )       e   q
0043260        0       t   h   e   n       f   o   n   t   S   e   t   !
0043300    f   =   0  \r  \t  \t   i   f       f   o   n   t   S   e   t
0043320    !   f       n   e       0       &       f   o   n   t       e
0043340    q       -   1       t   h   e   n       f   o   n   t   =   f
0043360   \r  \t  \t   ]  \r  \r  \t   /   /       i   f       n   o    
0043400    f   o   n   t   s       a   r   e       t   h   e   r   e   ,
0043420        g   e   t       s   y   s   t   e   m       f   o   n   t
0043440   \r  \t   i   f       f   o   n   t       e   q       -   1    
0043460    t   h   e   n       [  \r  \t  \t   f   o   n   t   S   e   t
0043500    !   0   =   "   S   Y   S   F   O   N   T   .   A   L   "  \r
0043520   \t  \t   f   o   n   t   F   i   l   e   I   n   i   t   (   f
0043540    o   n   t   S   e   t   ! 376 001  \0 331   l   0   ,       0
0043560    )  \r  \t  \t   f   o   n   t   =   0  \r  \t  \t   ]  \r  \r
0043600   \t   /   /       f   i   n   d       l   a   r   g   e   s   t
0043620        f   o   n   t       f   i   l   e  \r  \t   l   e   t    
0043640    m   a   x   L   e   n   g   t   h   =   0  \r  \t   f   o   r
0043660        f   =   0       t   o       m   a   x   F   o   n   t   -
0043700    1       d   o  \r  \t  \t   i   f       m   a   x   L   e   n
0043720    g   t   h       l   s       f   o   n   t   F   i   l   e   >
0043740    >   F   O   N   T   F   I   L   E   .   l   e   n   g   t   h
0043760    ^   f       t   h   e   n  \r  \t  \t  \t   m   a   x   L   e
0044000    n   g   t   h   =   f   o   n   t   F   i   l   e   >   >   F
0044020    O   N   T   F   I   L   E   .   l   e   n   g   t   h   ^   f
0044040   \r  \r  \t   /   /       p   i   c   k       s   m   a   l   l
0044060    e   s   t       f   o   n   t       a   s       m   e   s   s
0044100    a   g   e       d   i   s   p   l   a   y       f   o   n   t
0044120   \r  \t   l   e   t       m   i   n   H   e   i   g   h   t   =
0044140    1   0   0   0  \r  \t   f   o   r       f   = 376 001  \0   D
0044160  377   0       t   o       m   a   x   F   o   n   t   -   1    
0044200    d   o  \r  \t  \t   i   f       f   o   n   t   F   i   l   e
0044220    >   >   F   O   N   T   F   I   L   E   .   l   e   n   g   t
0044240    h   ^   f       n   e       0       t   h   e   n  \r  \t  \t
0044260   \t   i   f       f   o   n   t   F   i   l   e   >   >   F   O
0044300    N   T   F   I   L   E   .   h   e   i   g   h   t   ^   f    
0044320    l   s       m   i   n   H   e   i   g   h   t       t   h   e
0044340    n       [  \r  \t  \t  \t  \t   m   i   n   H   e   i   g   h
0044360    t   =   f   o   n   t   F   i   l   e   >   >   F   O   N   T
0044400    F   I   L   E   .   h   e   i   g   h   t   ^   f  \r  \t  \t
0044420   \t  \t   d   s   p   F   o   n   t   =   f  \r  \t  \t  \t  \t
0044440    ]  \r  \t   l   e   t       d   s   p   F   o   n   t   L   e
0044460    n   g   t   h   =   f   o   n   t   F   i   l   e   >   >   F
0044500    O   N   T   F   I   L   E   .   l   e   n   g   t   h   ^   d
0044520    s   p   F   o   n   t  \r  \t   l   e   t       f   o   n   t
0044540    S   t   r   e   a   m   =   C   r   e   a   t   e   D   i   s
0044560    k 376 001  \0 276 302   S   t   r   e   a   m   (   l   v   (
0044600    f   o   n   t   F   i   l   e   >   >   F   O   N   T   F   I
0044620    L   E   .   f   p   ^   d   s   p   F   o   n   t   )   ,  \r
0044640   \t  \t  \t  \t   k   s   T   y   p   e   R   e   a   d   O   n
0044660    l   y   )  \r  \t   d   s   p   F   o   n   t   A   d   d   r
0044700    e   s   s   =   n   e   e   d   B   l   o   c   k   (   d   s
0044720    p   F   o   n   t   L   e   n   g   t   h   )  \r  \t   R   e
0044740    a   d   B   l   o   c   k   (   f   o   n   t   S   t   r   e
0044760    a   m   ,       d   s   p   F   o   n   t   A   d   d   r   e
0045000    s   s   ,       d   s   p   F   o   n   t   L   e   n   g   t
0045020    h   )  \r  \t   C   l   o   s   e   s   (   f   o   n   t   S
0045040    t   r   e   a   m   )  \r  \t   d   s   p   F   o   n   t   A
0045060    d   d   r   e   s   s   =   d   s   p   F   o   n   t   A   d
0045100    d   r   e   s   s   +   2  \r  \t   f   o   n   t   F   i   l
0045120    e   >   >   F   O   N   T   F   I   L   E   .   l   e   n   g
0045140    t   h   ^   d   s   p   F   o   n   t   =   0  \r  \r  \t   /
0045160    /       m   a   k   e 376 001  \0   t   .       s   y   s   t
0045200    e   m       d   i   s   p   l   a   y       s   t   r   e   a
0045220    m  \r  \t   l   e   t       d   s   p   S   i   z   e   =   n
0045240    L   i   n   e   s       *       l   D   C   B       +       d
0045260    s   p   W   i   d   t   h       *       @   (   d   s   p   F
0045300    o   n   t   A   d   d   r   e   s   s   -   2   )  \r  \t   d
0045320    s   p   =   C   r   e   a   t   e   D   i   s   p   l   a   y
0045340    S   t   r   e   a   m   (   n   L   i   n   e   s   ,       A
0045360    l   l   o   c   a   t   e   (   f   r   e   e   S   t   o   r
0045400    a   g   e   Z   o   n   e   ,   d   s   p   S   i   z   e   )
0045420    ,  \r  \t  \t  \t   d   s   p   S   i   z   e   ,       d   s
0045440    p   F   o   n   t   A   d   d   r   e   s   s   )  \r  \t   S
0045460    h   o   w   D   i   s   p   l   a   y   S   t   r   e   a   m
0045500    (   d   s   p   ,       D   S   a   l   o   n   e   )  \r  \r
0045520   \t   /   /       a   l   l       p   e   r   m   a   n   e   n
0045540    t       s   t   o   r   a   g   e       s   h   o   u   l   d
0045560        h   a   v   e       b   e   e   n     376 001  \0 367 036
0045600    a   l   l   o   c   a   t   e   d       b   y       n   o   w
0045620   \r  \t   /   /       g   e   t       f   o   n   t       b   u
0045640    f   f   e   r  \r  \t   i   f       m   a   x   L   e   n   g
0045660    t   h       n   e       0       t   h   e   n      \r  \t  \t
0045700    f   o   n   t   F   i   l   e   >   >   F   O   N   T   F   I
0045720    L   E   .   b   u   f   f   e   r   =   n   e   e   d   B   l
0045740    o   c   k   (   m   a   x   L   e   n   g   t   h   )  \r  \t
0045760    f   o   n   t   F   i   l   e   >   >   F   O   N   T   F   I
0046000    L   E   .   c   u   r   r   e   n   t   =   -   1  \r  \t   f
0046020    o   n   t   F   i   l   e   >   >   F   O   N   T   F   I   L
0046040    E   .   b   u   f   f   e   r   L   e   n   g   t   h   =   m
0046060    a   x   L   e   n   g   t   h  \r  \r  \t   /   /       i   n
0046100    i   t   i   a   l   i   z   a   t   i   o   n       m   e   s
0046120    s   a   g   e  \r  \t   t   e   s   t       v   e   r   s   i
0046140    o   n   X  \r  \t   i   f   s   o       t   y   p   e   F   o
0046160    r   m   (   0   ,   "   *   N   D   D   R   A   W           5
0046200  376 001  \0 374 377   .   2   .   X                   [   N   o
0046220    v   e   m   b   e   r       2   3   ,       1   9   8   0   ]
0046240    *   N   "   )  \r  \t   i   f   n   o   t       t   y   p   e
0046260    F   o   r   m   (   0   ,   "   *   N   D   D   R   A   W    
0046300        5   .   2                   [   N   o   v   e   m   b   e
0046320    r       2   3   ,       1   9   8   0   ]   *   N   "   ,  \r
0046340   \t  \t   0   ,       "   D   o   c   u   m   e   n   t   a   t
0046360    i   o   n       u   p   d   a   t   e       o   n       <   A
0046400    l   t   o   D   o   c   s   >   D   R   A   W   -   n   e   w
0046420    s   .   p   r   e   s   s   *   N   "   )  \r  \t   t   y   p
0046440    e   F   o   r   m   (   0   ,       "   F   o   n   t   s    
0046460    0       t   o       3       a   r   e   :       "   )  \r  \t
0046500    f   o   r       f   =   0       t   o       m   a   x   F   o
0046520    n   t   -   1       d   o  \r  \t  \t   t   y   p   e   F   o
0046540    r   m   (   0   ,       (   (   f   o   n   t   S   e   t   !
0046560    f   )       ?       f   o   n   t   S   e   t   !   f   ,    
0046600    "   n   o   n   e 376 001  \0   @ 361   "   )   ,  \r  \t  \t
0046620   \t   0   ,       (   (   f       e   q       (   m   a   x   F
0046640    o   n   t   -   1   )   )       ?       "   *   N   "   ,    
0046660    "   ,       "   )   )  \r  \t   ]   i   n   i   t   U   S   E
0046700    R   C   M  \r  \r  \r  \r   a   n   d       f   o   n   t   F
0046720    i   l   e   I   n   i   t   (   f   o   n   t   N   a   m   e
0046740    ,       f   )       =       v   a   l   o   f       [   f   o
0046760    n   t   F   i   l   e   I   n   i   t  \r  \t   /   /       p
0047000    r   o   c   e   d   u   r   e       s   i   m   i   l   a   r
0047020        t   o       r   e   a   d   F   o   n   t   F   i   l   e
0047040        (   i   n       Z   P   I   O   )  \r  \t   i   f       f
0047060    o   n   t   N   a   m   e       e   q       0       r   e   s
0047100    u   l   t   i   s       0  \r  \t   l   e   t       f   i   l
0047120    e   =   O   p   e   n   F   i   l   e   (   f   o   n   t   N
0047140    a   m   e   ,       k   s   T   y   p   e   R   e   a   d   O
0047160    n   l   y   ,       0   ,       0   ,       l   v   (   f   o
0047200    n   t   F   i   l   e   >   >   F   O 376 001  \0 360 276   N
0047220    T   F   I   L   E   .   f   p   ^   f   )   )  \r  \t   i   f
0047240        f   i   l   e       e   q       0       t   h   e   n    
0047260    [  \r  \t  \t   f   o   n   t   F   i   l   e   >   >   F   O
0047300    N   T   F   I   L   E   .   l   e   n   g   t   h   ^   f   =
0047320    0  \r  \t  \t   r   e   s   u   l   t   i   s       0  \r  \t
0047340   \t   ]  \r  \t   f   o   n   t   F   i   l   e   >   >   F   O
0047360    N   T   F   I   L   E   .   l   e   n   g   t   h   ^   f   =
0047400    F   i   l   e   L   e   n   g   t   h   (   f   i   l   e   )
0047420    /   2   +   1  \r  \t   R   e   s   e   t   s   (   f   i   l
0047440    e   )  \r  \t   l   e   t       A   L   h   e   a   d   e   r
0047460    =   v   e   c       2  \r  \t   R   e   a   d   B   l   o   c
0047500    k   (   f   i   l   e   ,       A   L   h   e   a   d   e   r
0047520    ,       2   )  \r  \t   f   o   n   t   F   i   l   e   >   >
0047540    F   O   N   T   F   I   L   E   .   h   e   i   g   h   t   ^
0047560    f   =   A   L   h   e   a   d   e   r   >   >   A   L   .   h
0047600    e   i   g   h   t  \r  \t   f   o   n   t   F   i   l   e 376
0047620  001  \0   < 321   >   >   F   O   N   T   F   I   L   E   .   b
0047640    a   s   e   l   i   n   e   ^   f   =   A   L   h   e   a   d
0047660    e   r   >   >   A   L   .   b   a   s   e   l   i   n   e  \r
0047700   \t   C   l   o   s   e   s   (   f   i   l   e   )  \r  \t   /
0047720    /   c   h   e   c   k       f   o   n   t       n   a   m   e
0047740   \r  \t   r   e   s   u   l   t   i   s       M   a   k   e   F
0047760    o   n   t   E   n   t   r   y   (   f   o   n   t   N   a   m
0050000    e   ,       f   o   n   t   D   e   f   T   a   b   l   e   !
0050020    f   ,       f   )  \r  \t   ]   f   o   n   t   F   i   l   e
0050040    I   n   i   t  \r  \r  \r  \r   a   n   d       r   e   a   d
0050060    U   S   E   R   C   M   (   f   o   n   t   S   e   t   ,    
0050100    f   o   n   t   N   a   m   e   s   )       =       v   a   l
0050120    o   f       [   r   e   a   d   U   S   E   R   C   M  \r  \t
0050140    l   e   t       f   C   o   u   n   t   =   0  \r  \t   l   e
0050160    t       l   w   C   o   u   n   t   =   0  \r  \t   l   e   t
0050200        f   o   r   M   e   =   f   a   l   s   e  \r  \t   l   e
0050220    t       s   t 376 001  \0 003 344   r   =   v   e   c       1
0050240    2   8  \r  \t   l   e   t       u   s   e   r   c   m   =   O
0050260    p   e   n   F   i   l   e   (   "   U   S   E   R   .   C   M
0050300    "   ,       k   s   T   y   p   e   R   e   a   d   O   n   l
0050320    y   ,       c   h   a   r   I   t   e   m   )  \r  \t   s   w
0050340    i   t   c   h   o   n       R   e   a   d   U   s   e   r   C
0050360    m   I   t   e   m   (   u   s   e   r   c   m   ,       s   t
0050400    r   )       i   n   t   o       [  \r  \t   c   a   s   e    
0050420    $   E   :  \r  \t  \t   C   l   o   s   e   s   (   u   s   e
0050440    r   c   m   )  \r  \t  \t   b   r   e   a   k  \r  \t   c   a
0050460    s   e       $   L   :  \r  \t  \t   i   f       f   o   r   M
0050500    e       &       e   q   u   a   l   (   s   t   r   ,       "
0050520    F   O   N   T   "   )       t   h   e   n  \r  \t  \t  \t   f
0050540    C   o   u   n   t   =   f   C   o   u   n   t       +       r
0050560    e   a   d   U   S   E   R   C   M   f   o   n   t   (   u   s
0050600    e   r   c   m   ,       s   t   r   ,       f   o   n   t   S
0050620    e   t   ,       f   o   n   t   N 376 001  \0 233  \r   a   m
0050640    e   s   )  \r  \t  \t   i   f       f   o   r   M   e       &
0050660        e   q   u   a   l   (   s   t   r   ,       "   L   I   N
0050700    E   W   I   D   T   H   "   )       t   h   e   n  \r  \t  \t
0050720   \t   l   w   C   o   u   n   t   =   l   w   C   o   u   n   t
0050740        +       r   e   a   d   U   S   E   R   C   M   l   i   n
0050760    e   W   i   d   t   h   (   u   s   e   r   c   m   ,       s
0051000    t   r   )  \r  \t  \t   l   o   o   p  \r  \t   c   a   s   e
0051020        $   N   :  \r  \t  \t   f   o   r   M   e   =   e   q   u
0051040    a   l   (   s   t   r   ,       "   D   R   A   W   "   )  \r
0051060   \t  \t   l   o   o   p  \r  \t   c   a   s   e       $   P   :
0051100   \r  \t   c   a   s   e       $   S   :  \r  \t  \t   l   o   o
0051120    p  \r  \t  \t   ]       r   e   p   e   a   t  \r  \t   i   f
0051140        f   C   o   u   n   t       e   q       0       t   h   e
0051160    n       [  \r  \t  \t   f   o   n   t   S   e   t   !   0   =
0051200    "   H   E   L   V   E   T   I   C   A   1   2   .   A   L   "
0051220   \r  \t  \t   f   o   n   t   S   e   t   !   1   =   " 376 001
0051240   \0 226 275   H   E   L   V   E   T   I   C   A   1   2   B   .
0051260    A   L   "  \r  \t  \t   f   o   n   t   S   e   t   !   2   =
0051300    "   H   E   L   V   E   T   I   C   A   8   .   A   L   "  \r
0051320   \t  \t   f   o   n   t   S   e   t   !   3   =   "   A   R   R
0051340    O   W   S   1   0   .   A   L   "  \r  \t  \t   ]  \r  \t   /
0051360    /       i   f       n   o   t   h   i   n   g       i   n    
0051400    U   S   E   R   .   C   M   ,       u   s   e       d   e   f
0051420    a   u   l   t       v   a   l   u   e   s       (   s   e   e
0051440        Z   P   P   R   E   S   S   .   S   R   )  \r  \t   i   f
0051460        l   w   C   o   u   n   t       e   q       0       t   h
0051500    e   n       l   i   n   e   T   h   i   c   k   n   e   s   s
0051520    T   a   b   l   e   =   0  \r  \t   ]   r   e   a   d   U   S
0051540    E   R   C   M  \r  \r  \r  \r   a   n   d       r   e   a   d
0051560    U   S   E   R   C   M   f   o   n   t   (   u   s   e   r   c
0051600    m   ,       s   t   r   ,       f   o   n   t   s   e   t   ,
0051620        f   o   n   t   N   a   m   e   s   )       =       v   a
0051640    l   o   f 376 001  \0   m   ^       [   r   e   a   d   U   S
0051660    E   R   C   M   f   o   n   t  \r  \t   i   f       R   e   a
0051700    d   U   s   e   r   C   m   I   t   e   m   (   u   s   e   r
0051720    c   m   ,       s   t   r   )       n   e       $   P       r
0051740    e   s   u   l   t   i   s       0  \r  \t   l   e   t       f
0051760    =   s   t   r   >   >   S   T   R   I   N   G   .   c   h   a
0052000    r   ^   1       -       $   0  \r  \t   i   f       (   f    
0052020    l   s       0   )       %       (   f       g   e       m   a
0052040    x   F   o   n   t   )       r   e   s   u   l   t   i   s    
0052060    0  \r  \t   l   e   t       l   e   n   g   t   h   =   s   t
0052100    r   >   >   S   T   R   I   N   G   .   l   e   n   g   t   h
0052120   \r  \t   l   e   t       i   s   t   a   r   t   ,       i   e
0052140    n   d   =       2   ,       l   e   n   g   t   h  \r  \t   f
0052160    o   r       i   =   2       t   o       l   e   n   g   t   h
0052200        d   o  \r  \t  \t   i   f       s   t   r   >   >   S   T
0052220    R   I   N   G   .   c   h   a   r   ^   i       n   e       $
0052240    *   S       t   h   e   n     376 001  \0   F   j   [       i
0052260    s   t   a   r   t   =   i   ;       b   r   e   a   k       ]
0052300   \r  \t   f   o   r       i   =   i   s   t   a   r   t       t
0052320    o       l   e   n   g   t   h       d   o  \r  \t  \t   i   f
0052340        s   t   r   >   >   S   T   R   I   N   G   .   c   h   a
0052360    r   ^   i       e   q       $   *   S       t   h   e   n    
0052400    [       i   e   n   d   =   i   -   1   ;       b   r   e   a
0052420    k       ]  \r  \t   l   e   t       n   a   m   e   =   f   o
0052440    n   t   N   a   m   e   s   !   f  \r  \t   f   o   r       i
0052460    =   i   s   t   a   r   t       t   o       i   e   n   d    
0052500    d   o  \r  \t  \t   n   a   m   e   >   >   S   T   R   I   N
0052520    G   .   c   h   a   r   ^   (   i   -   i   s   t   a   r   t
0052540    +   1   )   =   s   t   r   >   >   S   T   R   I   N   G   .
0052560    c   h   a   r   ^   i  \r  \t   n   a   m   e   >   >   S   T
0052600    R   I   N   G   .   l   e   n   g   t   h   =   i   e   n   d
0052620    -   i   s   t   a   r   t   +   1  \r  \t   f   o   n   t   s
0052640    e   t   !   f   =   n   a   m   e  \r  \t   r   e 376 001  \0
0052660    P   c   s   u   l   t   i   s       1  \r  \t   ]   r   e   a
0052700    d   U   S   E   R   C   M   f   o   n   t  \r  \r  \r   a   n
0052720    d       r   e   a   d   U   S   E   R   C   M   l   i   n   e
0052740    W   i   d   t   h   (   u   s   e   r   c   m   ,       s   t
0052760    r   )       =       v   a   l   o   f       [   r   e   a   d
0053000    U   S   E   R   C   M   l   i   n   e   W   i   d   t   h  \r
0053020   \t   i   f       R   e   a   d   U   s   e   r   C   m   I   t
0053040    e   m   (   u   s   e   r   c   m   ,       s   t   r   )    
0053060    n   e       $   P       r   e   s   u   l   t   i   s       0
0053100   \r  \t   l   e   t       f   =   s   t   r   >   >   S   T   R
0053120    I   N   G   .   c   h   a   r   ^   1       -       $   0  \r
0053140   \t   i   f       (   f       l   s       0   )       %       (
0053160    f       g   r       3   )       r   e   s   u   l   t   i   s
0053200        0  \r  \t   l   e   t       l   e   n   g   t   h   =   s
0053220    t   r   >   >   S   T   R   I   N   G   .   l   e   n   g   t
0053240    h  \r  \t   l   e   t       i   s   t   a   r   t   ,       i
0053260    e   n 376 001  \0   r   P   d   =       2   ,       l   e   n
0053300    g   t   h  \r  \t   f   o   r       i   =   2       t   o    
0053320    l   e   n   g   t   h       d   o  \r  \t  \t   i   f       s
0053340    t   r   >   >   S   T   R   I   N   G   .   c   h   a   r   ^
0053360    i       n   e       $   *   S       t   h   e   n       [    
0053400    i   s   t   a   r   t   =   i   ;       b   r   e   a   k    
0053420    ]  \r  \t   f   o   r       i   =   i   s   t   a   r   t    
0053440    t   o       l   e   n   g   t   h       d   o  \r  \t  \t   i
0053460    f       s   t   r   >   >   S   T   R   I   N   G   .   c   h
0053500    a   r   ^   i       e   q       $   *   S       t   h   e   n
0053520        [       i   e   n   d   =   i   -   1   ;       b   r   e
0053540    a   k       ]  \r  \t   l   e   t       n   u   m   =   0  \r
0053560   \t   f   o   r       i   =   i   s   t   a   r   t       t   o
0053600        i   e   n   d       d   o       [  \r  \t  \t   l   e   t
0053620        c   =   s   t   r   >   >   S   T   R   I   N   G   .   c
0053640    h   a   r   ^   i       -       $   0  \r  \t  \t   i   f    
0053660    c       l   s       0     376  \0   k 333   r   %       c    
0053700    g   r       9       r   e   s   u   l   t   i   s       0  \r
0053720   \t  \t   n   u   m   =   n   u   m   *   1   0       +       c
0053740   \r  \t  \t   ]  \r  \t   l   i   n   e   T   h   i   c   k   n
0053760    e   s   s   T   a   b   l   e   !   f   =   n   u   m  \r  \t
0054000    r   e   s   u   l   t   i   s       1  \r  \t   ]   r   e   a
0054020    d   U   S   E   R   C   M   l   i   n   e   W   i   d   t   h
0054040   \r  \r  \r  \r  \r  \r  \r 374                                
0054050