$ od -c -N 50000 [eris]<Lisp>SOURCES>LISPDMC.DM!1
0000000  377  \0  \0   L   B   I   T   B   L   T   .   m   c  \0 373 232
0000020  035 021 237  \0  \0 376 001  \0 327   L   T   i   t   l   e   [
0000040    l   b   i   t   b   l   t   .   m   c   ,       D   e   c   e
0000060    m   b   e   r       7   ,       1   9   8   2           1   :
0000100    1   1       P   M   ,       M   a   s   i   n   t   e   r   ]
0000120    ;  \r               I   n   s   S   e   t   [   L   i   s   p
0000140    I   n   s   S   e   t   ,       1   ]   ;  \r  \r   r   e   g
0000160    O   P   1   [   1   6   6   ,       S   t   a   c   k   B   R
0000200    ,       o   p   B   I   T   B   L   T   ,       n   o   N   D
0000220    a   t   a   ]   ;  \r   *           d   u   m   m   y       d
0000240    e   f   i   n   i   t   i   o   n       f   o   r       a   l
0000260    t   o       b   i   t   b   l   t   :  \r  \r   B   i   t   B
0000300    l   t   S   u   b   :  \t   *       E   n   t   r   y       p
0000320    o   i   n   t  \r   S   u   b   r   o   u   t   i   n   e   ;
0000340   \r  \t   S   t   a   c   k   _       A   0   ;  \r  \t   R   E
0000360    T   U   R   N   [   a   l   u   =   0   ]   ;  \r  \r  \r    
0000400            K   n   o   w   R   B   a   s   e   [   L   T   E   M
0000420    P   0   ]   ;  \r               T   O 376 001  \0   < 305   P
0000440        L   E   V   E   L   ;  \r  \r  \f  \r  \r   *       R   e
0000460    f   e   r       t   o       t   h   e       P   r   i   n   c
0000500    O   p   s       f   o   r       p   r   i   m   a   r   y    
0000520    d   o   c   u   m   e   n   t   a   t   i   o   n   .  \r   *
0000540        A   l   l       n   u   m   b   e   r   s       a   r   e
0000560        o   c   t   a   l       e   x   c   e   p   t       t   i
0000600    m   i   n   g   s   ,       w   h   i   c   h       a   r   e
0000620        d   e   c   i   m   a   l   .  \r  \r   *       D   a   t
0000640    a       s   t   r   u   c   t   u   r   e   s   :  \r  \r   *
0000660        B   i   t   B   l   t   A   r   g   :       T   Y   P   E
0000700        =       M   A   C   H   I   N   E       D   E   P   E   N
0000720    D   E   N   T       R   E   C   O   R   D       [  \r   M   S
0000740    C   [   B   B   .   d   s   t   L   o   ,       0   ]   ;  \t
0000760   \t   *       d   s   t   :       B   i   t   A   d   d   r   e
0001000    s   s   ,  \r   M   S   C   [   B   B   .   d   s   t   H   i
0001020    ,       1   ]   ;  \r   M   S   C   [   B   B   .   d   s 376
0001040  001  \0  \n   N   t   B   i   t   ,       2   ]   ;  \r   M   S
0001060    C   [   B   B   .   d   s   t   B   p   l   ,       3   ]   ;
0001100   \t  \t   *       d   s   t   B   p   l   :       I   N   T   E
0001120    G   E   R   ,  \r   M   S   C   [   B   B   .   s   r   c   L
0001140    o   ,       4   ]   ;  \t  \t   *       s   r   c   :       B
0001160    i   t   A   d   d   r   e   s   s   ,  \r   M   S   C   [   B
0001200    B   .   s   r   c   H   i   ,       5   ]   ;  \r   M   S   C
0001220    [   B   B   .   s   r   c   B   i   t   ,       6   ]   ;  \r
0001240    M   S   C   [   B   B   .   s   r   c   B   p   l   ,       7
0001260    ]   ;  \t  \t   *       s   r   c   B   p   l   :       I   N
0001300    T   E   G   E   R   ,  \r   M   S   C   [   B   B   .   w   i
0001320    d   t   h   ,       1   0   ]   ;  \t  \t   *       w   i   d
0001340    t   h   :       C   A   R   D   I   N   A   L   ,  \r   M   S
0001360    C   [   B   B   .   h   e   i   g   h   t   ,       1   1   ]
0001400    ;  \t  \t   *       h   e   i   g   h   t   :       C   A   R
0001420    D   I   N   A   L   ,  \r   M   S   C   [   B   B   .   f   l
0001440    a   g   s   , 376 001  \0 370 330       1   2   ]   ;  \t  \t
0001460    *       f   l   a   g   s   :       B   i   t   B   l   t   F
0001500    l   a   g   s       ]   ;  \r  \r   *       B   i   t   A   d
0001520    d   r   e   s   s   :       T   Y   P   E       =       M   A
0001540    C   H   I   N   E       D   E   P   E   N   D   E   N   T    
0001560    R   E   C   O   R   D       [  \r   *  \t   w   o   r   d   :
0001600        L   O   N   G       P   O   I   N   T   E   R   ,  \r   *
0001620   \t   r   e   s   e   r   v   e   d   :       [   0   .   .   7
0001640    7   7   7   B   ]   ,  \r   *  \t   b   i   t   :       [   0
0001660    .   .   1   7   B   ]       ]   ;  \r  \r   *       B   i   t
0001700    B   l   t   F   l   a   g   s   :       T   Y   P   E       =
0001720        M   A   C   H   I   N   E       D   E   P   E   N   D   E
0001740    N   T       R   E   C   O   R   D       [  \r   M   C   [   B
0001760    B   F   .   d   i   r   e   c   t   i   o   n   ,       1   0
0002000    0   0   0   0   ]   ;  \t   *       d   i   r   e   c   t   i
0002020    o   n   :       {   f   o   r   w   a   r   d   ,       b   a
0002040    c   k   w   a   r   d   }   ,  \r 376 001  \0   h 366   M   C
0002060    [   B   B   F   .   d   i   s   j   o   i   n   t   ,       4
0002100    0   0   0   0   ]   ;  \t   *       d   i   s   j   o   i   n
0002120    t   :       B   O   O   L   E   A   N   ,  \r   M   C   [   B
0002140    B   F   .   d   i   s   j   o   i   n   t   I   t   e   m   s
0002160    ,       2   0   0   0   0   ]   ;  \t   *       d   i   s   j
0002200    o   i   n   t   I   t   e   m   s   :       B   O   O   L   E
0002220    A   N   ,  \r   M   C   [   B   B   F   .   g   r   a   y   ,
0002240        1   0   0   0   0   ]   ;  \t  \t   *       g   r   a   y
0002260    :       B   O   O   L   E   A   N   ,  \r   M   C   [   B   B
0002300    F   .   s   r   c   F   u   n   c   ,       4   0   0   0   ]
0002320    ;  \t  \t   *       s   r   c   F   u   n   c   :       {   n
0002340    o   r   m   a   l   ,       c   o   m   p   l   e   m   e   n
0002360    t   }   ,  \r   M   C   [   B   B   F   .   d   s   t   F   u
0002400    n   c   ,       3   0   0   0   ]   ;  \t  \t   *       d   s
0002420    t   F   u   n   c   :       {   n   u   l   l   ,       a   n
0002440    d   ,       o   r   ,       x   o   r   }   ,  \r  \t 376 001
0002460   \0   <   /  \t  \t  \t   *       r   e   s   e   r   v   e   d
0002500    :       [   0   .   .   7   7   7   B   ]       _       0    
0002520    ]   ;  \r  \r   *       -   -       r   e   -   i   n   t   e
0002540    r   p   r   e   t   a   t   i   o   n       o   f       s   r
0002560    c   B   p   l       i   f       g   r   a   y       =       T
0002600    R   U   E  \r   *       G   r   a   y   P   a   r   m   :    
0002620    T   Y   P   E       =       M   A   C   H   I   N   E       D
0002640    E   P   E   N   D   E   N   T       R   E   C   O   R   D    
0002660    [  \r   *  \t   r   e   s   e   r   v   e   d   :       [   0
0002700    .   .   1   7   B   ]       _       0   ,  \r   *  \t   y   O
0002720    f   f   s   e   t   :       [   0   .   .   1   7   B   ]   ,
0002740   \r   *  \t   w   i   d   t   h   M   i   n   u   s   O   n   e
0002760    :       [   0   .   .   1   7   B   ]       _       0   ,  \t
0003000    -   -       p   r   e   s   e   n   t       s   p   e   c    
0003020    r   e   q   u   i   r   e   s       0  \r   *  \t   h   e   i
0003040    g   h   t   M   i   n   u   s   O   n   e   :       [   0   .
0003060    .   1   7 376 001  \0   ]   z   B   ]       ]   ;  \r  \f  \r
0003100    %  \r   T   h   e       2   0       B   i   t   B   l   t    
0003120    F   u   n   c   t   i   o   n   s       (   c   o   m   b   i
0003140    n   a   t   i   o   n   s       o   f       g   r   a   y   ,
0003160        s   r   c   F   u   n   c   ,       a   n   d       d   s
0003200    t   F   u   n   c   )       a   r   e  \r   d   i   v   i   d
0003220    e   d       i   n   t   o       4       c   l   a   s   s   e
0003240    s   :  \r  \t   A  \t   d   e   s   t       _       f   (   g
0003260    r   a   y   )  \r  \t   B  \t   d   e   s   t       _       f
0003300    (   g   r   a   y   ,       d   e   s   t   )  \r  \t   C  \t
0003320    d   e   s   t       _       f   (   s   o   u   r   c   e   )
0003340   \r  \t   D  \t   d   e   s   t       _       f   (   s   o   u
0003360    r   c   e   ,       d   e   s   t   )  \r  \r   T   h   e    
0003400    d   i   s   t   r   i   b   u   t   i   o   n       o   f    
0003420    f   u   n   c   t   i   o   n   s       i   n   t   o       c
0003440    l   a   s   s   e   s       i   s   :  \r                   F
0003460    u   n   c   t   i   o   n     376 001  \0 035   O   (   c   l
0003500    a   s   s   )  \t   g   r   a   y  \t   s   r   c   F   u   n
0003520    c  \t  \t   d   s   t   F   u   n   c  \r  \t       0       (
0003540    C   )  \t  \t   F   A   L   S   E  \t   n   o   r   m   a   l
0003560   \t  \t   n   u   l   l  \r  \t       1       (   D   )  \t  \t
0003600    F   A   L   S   E  \t   n   o   r   m   a   l  \t  \t   a   n
0003620    d  \r  \t       2       (   D   )  \t  \t   F   A   L   S   E
0003640   \t   n   o   r   m   a   l  \t  \t   o   r  \r  \t       3    
0003660    (   D   )  \t  \t   F   A   L   S   E  \t   n   o   r   m   a
0003700    l  \t  \t   x   o   r  \r  \t       4       (   C   )  \t  \t
0003720    F   A   L   S   E  \t   c   o   m   p   l   e   m   e   n   t
0003740   \t   n   u   l   l  \r  \t       5       (   D   )  \t  \t   F
0003760    A   L   S   E  \t   c   o   m   p   l   e   m   e   n   t  \t
0004000    a   n   d  \r  \t       6       (   D   )  \t  \t   F   A   L
0004020    S   E  \t   c   o   m   p   l   e   m   e   n   t  \t   o   r
0004040   \r  \t       7       (   D   )  \t  \t   F   A   L   S   E  \t
0004060    c   o   m   p   l   e   m   e   n   t  \t   x   o 376 001  \0
0004100  350 351   r  \r  \t   1   0       (   A   )  \t  \t   T   R   U
0004120    E  \t   n   o   r   m   a   l  \t  \t   n   u   l   l  \r  \t
0004140    1   1       (   B   )  \t  \t   T   R   U   E  \t   n   o   r
0004160    m   a   l  \t  \t   a   n   d  \r  \t   1   2       (   B   )
0004200   \t  \t   T   R   U   E  \t   n   o   r   m   a   l  \t  \t   o
0004220    r  \r  \t   1   3       (   B   )  \t  \t   T   R   U   E  \t
0004240    n   o   r   m   a   l  \t  \t   x   o   r  \r  \t   1   4    
0004260    (   A   )  \t  \t   T   R   U   E  \t   c   o   m   p   l   e
0004300    m   e   n   t  \t   n   u   l   l  \r  \t   1   5       (   B
0004320    )  \t  \t   T   R   U   E  \t   c   o   m   p   l   e   m   e
0004340    n   t  \t   a   n   d  \r  \t   1   6       (   B   )  \t  \t
0004360    T   R   U   E  \t   c   o   m   p   l   e   m   e   n   t  \t
0004400    o   r  \r  \t   1   7       (   B   )  \t  \t   T   R   U   E
0004420   \t   c   o   m   p   l   e   m   e   n   t  \t   x   o   r  \r
0004440   \r  \r   T   e   r   m   i   n   o   l   o   g   y   :       w
0004460    h   e   n       r   e   f   e   r   r   i   n   g       t   o
0004500        w 376 001  \0 262 336   o   r   d   s       i   n       a
0004520        s   c   a   n       l   i   n   e   ,       "   l   e   f
0004540    t   "       a   n   d       "   r   i   g   h   t   "  \r   r
0004560    e   f   e   r       t   o       t   h   e       w   o   r   d
0004600    s       w   i   t   h       l   o   w   e   r       a   n   d
0004620        h   i   g   h   e   r       a   d   d   r   e   s   s   e
0004640    s   ,       r   e   s   p   e   c   t   i   v   e   l   y   ,
0004660        i   n   d   e   p   e   n   d   e   n   t  \r   o   f    
0004700    t   h   e       d   i   r   e   c   t   i   o   n       o   f
0004720        p   r   o   c   e   s   s   i   n   g       t   h   e    
0004740    s   c   a   n       l   i   n   e   ;           "   f   i   r
0004760    s   t   "       a   n   d       "   l   a   s   t   "       r
0005000    e   f   e   r  \r   t   o       t   h   e       f   i   r   s
0005020    t       a   n   d       l   a   s   t       w   o   r   d   s
0005040        e   n   c   o   u   n   t   e   r   e   d       i   n    
0005060    t   h   e       d   i   r   e   c   t   i   o   n       o   f
0005100        p   r   o   c   e   s 376 001  \0 005 257   s   i   n   g
0005120    .  \r  \r   S   i   n   c   e       t   h   e       D   o   r
0005140    a   d   o       c   a   n       d   o       B   i   t   B   l
0005160    t       i   n       e   i   t   h   e   r       d   i   r   e
0005200    c   t   i   o   n       a   t       e   q   u   a   l       c
0005220    o   s   t   ,  \r   t   h   i   s       i   m   p   l   e   m
0005240    e   n   t   a   t   i   o   n       a   l   w   a   y   s    
0005260    u   s   e   s       t   h   e       d   i   r   e   c   t   i
0005300    o   n       s   p   e   c   i   f   i   e   d       b   y    
0005320    t   h   e       p   r   o   g   r   a   m   m   e   r   .  \r
0005340    T   h   e       d   i   s   j   o   i   n   t       b   i   t
0005360        i   s       i   g   n   o   r   e   d   ,       a   n   d
0005400        d   i   s   j   o   i   n   t   I   t   e   m   s       i
0005420    s       u   s   e   d       o   n   l   y       t   o       d
0005440    e   t   e   r   m   i   n   e  \r   w   h   e   t   h   e   r
0005460        o   r       n   o   t       "   t   o   u   c   h   i   n
0005500    g   "       o   f       t   h   e       d   a 376 001  \0 256
0005520  254   t   a       i   s       r   e   q   u   i   r   e   d    
0005540    i   n       s   o   m   e       c   a   s   e   s       (   s
0005560    e   e       b   e   l   o   w   )   .  \r  \r   T   h   e    
0005600    d   e   s   t   i   n   a   t   i   o   n       i   t   e   m
0005620        i   s       c   o   n   s   i   d   e   r   e   d       t
0005640    o       c   o   n   s   i   s   t       o   f       a       l
0005660    e   f   t       p   a   r   t   i   a   l       w   o   r   d
0005700    ,  \r   s   o   m   e       n   u   m   b   e   r       o   f
0005720        f   u   l   l       (   b   o   d   y   )       w   o   r
0005740    d   s   ,       a   n   d       a       r   i   g   h   t    
0005760    p   a   r   t   i   a   l       w   o   r   d   .           I
0006000    f       t   h   e       i   t   e   m  \r   b   e   g   i   n
0006020    s       o   r       e   n   d   s       o   n       a       w
0006040    o   r   d       b   o   u   n   d   a   r   y   ,       t   h
0006060    e       l   e   f   t       o   r       r   i   g   h   t    
0006100    w   o   r   d       i   s       s   t   i   l   l  \r   c   o
0006120    n 376 001  \0 225 204   s   i   d   e   r   e   d       t   o
0006140        b   e       a       p   a   r   t   i   a   l       w   o
0006160    r   d   .  \r  \r   T   h   e       d   e   s   t   i   n   a
0006200    t   i   o   n       b   i   t   s       p   r   e   s   e   r
0006220    v   e   d       i   n       t   h   e       l   e   f   t    
0006240    a   n   d       r   i   g   h   t       p   a   r   t   i   a
0006260    l       w   o   r   d   s  \r   a   r   e       d   e   t   e
0006300    r   m   i   n   e   d       b   y       t   h   e       S   H
0006320    C       r   e   g   i   s   t   e   r   '   s       L   M   a
0006340    s   k       a   n   d       R   M   a   s   k   ,       r   e
0006360    s   p   e   c   t   i   v   e   l   y   ,  \r   w   h   e   r
0006400    e       L   M   a   s   k       =       d   s   t   .   b   i
0006420    t   ,       R   M   a   s   k       =       1   7   -   (   (
0006440    d   s   t   .   b   i   t   +   w   i   d   t   h   -   1   )
0006460        m   o   d       2   0   )   .  \r  \r   T   h   e       d
0006500    e   s   t   i   n   a   t   i   o   n       w   i   d   t   h
0006520        i   n       w   o 376 001  \0 345 254   r   d   s   ,    
0006540    i   n   c   l   u   d   i   n   g       t   h   e       f   i
0006560    r   s   t       a   n   d       l   a   s   t       p   a   r
0006600    t   i   a   l       w   o   r   d   s   ,  \r   i   s       c
0006620    o   m   p   u   t   e   d       b   y       D   W   i   d   t
0006640    h       =       (   w   i   d   t   h       +       d   s   t
0006660    .   b   i   t       +       1   7   )   /   2   0   .        
0006700    S   i   m   i   l   a   r   l   y   ,  \r   t   h   e       s
0006720    o   u   r   c   e       w   i   d   t   h       i   n       w
0006740    o   r   d   s   ,       i   n   c   l   u   d   i   n   g    
0006760    t   h   e       f   i   r   s   t       a   n   d       l   a
0007000    s   t       p   a   r   t   i   a   l       w   o   r   d   s
0007020    ,  \r   i   s       c   o   m   p   u   t   e   d       b   y
0007040        S   W   i   d   t   h       =       (   w   i   d   t   h
0007060        +       s   r   c   .   b   i   t       +       1   7   )
0007100    /   2   0   .  \r   D   W   i   d   t   h       a   n   d    
0007120    S   W   i   d   t   h       d   i   f   f 376 001  \0   B 347
0007140    e   r       b   y       a   t       m   o   s   t       +   /
0007160    -   1   .  \r  \r   I   f       D   W   i   d   t   h       >
0007200        2       t   h   e   n       t   h   e       d   e   s   t
0007220    i   n   a   t   i   o   n       c   o   n   s   i   s   t   s
0007240        o   f       a       l   e   f   t       p   a   r   t   i
0007260    a   l       w   o   r   d   ,       D   W   i   d   t   h   -
0007300    2  \r   f   u   l   l       b   o   d   y       w   o   r   d
0007320    s   ,       a   n   d       a       r   i   g   h   t       p
0007340    a   r   t   i   a   l       w   o   r   d   .  \r   I   f    
0007360    D   W   i   d   t   h       =       2       t   h   e   n    
0007400    t   h   e       i   t   e   m       c   o   n   s   i   s   t
0007420    s       o   f       a       l   e   f   t       p   a   r   t
0007440    i   a   l       w   o   r   d       i   m   m   e   d   i   a
0007460    t   e   l   y  \r   f   o   l   l   o   w   e   d       b   y
0007500        a       r   i   g   h   t       p   a   r   t   i   a   l
0007520        w   o   r   d   .  \r   I   f       D   W   i   d   t   h
0007540  376 001  \0 250   E       =       1       t   h   e   n       t
0007560    h   e       e   n   t   i   r   e       d   e   s   t   i   n
0007600    a   t   i   o   n       i   t   e   m       l   i   e   s    
0007620    w   i   t   h   i   n       a       s   i   n   g   l   e    
0007640    w   o   r   d   ,  \r   n   o   t       c   r   o   s   s   i
0007660    n   g       a       w   o   r   d       b   o   u   n   d   a
0007700    r   y   .           E   f   f   e   c   t   i   v   e   l   y
0007720    ,       t   h   e       l   e   f   t       a   n   d       r
0007740    i   g   h   t       p   a   r   t   i   a   l       w   o   r
0007760    d   s  \r   a   r   e       o   n   e       a   n   d       t
0010000    h   e       s   a   m   e   .           T   h   i   s       c
0010020    a   s   e       (   c   a   l   l   e   d       t   h   e    
0010040    "   t   h   i   n   "       c   a   s   e   )       r   e   q
0010060    u   i   r   e   s  \r   s   p   e   c   i   a   l       h   a
0010100    n   d   l   i   n   g   ,       a   s       b   o   t   h    
0010120    L   M   a   s   k       a   n   d       R   M   a   s   k    
0010140    m   u   s   t     376 001  \0   6 277   b   e       a   p   p
0010160    l   i   e   d       s   i   m   u   l   t   a   n   e   o   u
0010200    s   l   y   .  \r  \f  \r   P   r   o   c   e   s   s   i   n
0010220    g       o   f       t   h   e       s   c   a   n       l   i
0010240    n   e       i   s       c   o   n   t   r   o   l   l   e   d
0010260        b   y       t   w   o       c   o   u   n   t   e   r   s
0010300    :       t   h   e       C   n   t       r   e   g   i   s   t
0010320    e   r  \r   (   l   o   a   d   e   d       f   r   o   m    
0010340    I   C   n   t   )   ,       w   h   i   c   h       c   o   u
0010360    n   t   s       t   h   e       i   n   n   e   r       l   o
0010400    o   p       (   2   0       w   o   r   d   s       o   r    
0010420    f   e   w   e   r   )   ,       a   n   d  \r   M   C   o   u
0010440    n   t   ,       w   h   i   c   h       c   o   u   n   t   s
0010460        t   h   e       o   u   t   e   r       l   o   o   p   .
0010500            R   o   u   g   h   l   y       s   p   e   a   k   i
0010520    n   g   ,  \r   C   n   t       i   s       l   o   a   d   e
0010540    d       i   n   i   t   i   a   l   l 376 001  \0 312   L   y
0010560        w   i   t   h       D   W   i   d   t   h       m   o   d
0010600        2   0       a   n   d       M   C   o   u   n   t       w
0010620    i   t   h       D   W   i   d   t   h   /   2   0   .  \r   T
0010640    h   e       i   n   n   e   r       l   o   o   p       i   s
0010660        e   x   e   c   u   t   e   d       C   n   t       t   i
0010700    m   e   s   ;       t   h   e   n   ,       u   n   t   i   l
0010720        M   C   o   u   n   t       i   s       e   x   h   a   u
0010740    s   t   e   d   ,  \r   C   n   t       i   s       r   e   l
0010760    o   a   d   e   d       w   i   t   h       2   0       a   n
0011000    d       t   h   e       i   n   n   e   r       l   o   o   p
0011020        i   s       e   x   e   c   u   t   e   d       2   0    
0011040    m   o   r   e       t   i   m   e   s   .  \r   T   h   e    
0011060    r   e   a   s   o   n       f   o   r       t   h   i   s    
0011100    a   r   r   a   n   g   e   m   e   n   t       i   s       t
0011120    o       p   e   r   m   i   t       a       P   r   e   F   e
0011140    t   c   h       t   o       b   e       e   x   e   c   u 376
0011160  001  \0 214 372   t   e   d  \r   e   v   e   r   y       2   0
0011200        w   o   r   d   s   .  \r  \r   M   o   r   e       p   r
0011220    e   c   i   s   e   l   y   :       B   e   f   o   r   e    
0011240    e   a   c   h       h   o   r   i   z   o   n   t   a   l    
0011260    l   o   o   p   ,       t   h   e       C   n   t       r   e
0011300    g   i   s   t   e   r       i   s       l   o   a   d   e   d
0011320        w   i   t   h  \r           i   f       D   W   i   d   t
0011340    h       <       2   3       t   h   e   n       D   W   i   d
0011360    t   h   -   1       e   l   s   e       (   D   W   i   d   t
0011400    h   -   3   )       m   o   d       2   0       +   2   ,    
0011420    s   o   :  \r  \t   C   n   t       >       1       i   f    
0011440    t   h   e       b   o   d   y       c   o   n   t   a   i   n
0011460    s       o   n   e       o   r       m   o   r   e       w   o
0011500    r   d   s   .  \r  \t   C   n   t       =       1       i   f
0011520        t   h   e   r   e       a   r   e       n   o       b   o
0011540    d   y       w   o   r   d   s   .  \r  \t   C   n   t       =
0011560        0       i 376 001  \0 252   {   n       t   h   e       t
0011600    h   i   n       c   a   s   e   .  \r   C   n   t       i   s
0011620        d   e   c   r   e   m   e   n   t   e   d       t   w   i
0011640    c   e       b   e   f   o   r   e       t   h   e       m   a
0011660    i   n       l   o   o   p       i   s       r   e   a   c   h
0011700    e   d   ,       s   o       u   p   o   n       e   n   t   r
0011720    y  \r   t   o       t   h   e       m   a   i   n       l   o
0011740    o   p       i   t       c   o   n   t   a   i   n   s       D
0011760    W   i   d   t   h   -   3       (   a   s   s   u   m   i   n
0012000    g       D   W   i   d   t   h   <   2   3   )   ,       w   h
0012020    i   c   h       i   s       p   r   e   c   i   s   e   l   y
0012040   \r   t   h   e       c   o   r   r   e   c   t       v   a   l
0012060    u   e       f   o   r       g   o   i   n   g       a   r   o
0012100    u   n   d       t   h   e       l   o   o   p       D   W   i
0012120    d   t   h   -   2       t   i   m   e   s   .           (   T
0012140    h   e       e   x   t   r   a       2  \r   i   n       D   W
0012160    i   d   t   h       a   r   e     376 001  \0 371 212   t   h
0012200    e       f   i   r   s   t       a   n   d       l   a   s   t
0012220        p   a   r   t   i   a   l       w   o   r   d   s   ,    
0012240    w   h   i   c   h       a   r   e       h   a   n   d   l   e
0012260    d       o   u   t   s   i   d   e  \r   t   h   e       w   o
0012300    r   d       l   o   o   p   .   )  \r  \r   M   C   o   u   n
0012320    t       i   s       l   o   a   d   e   d       w   i   t   h
0012340        (   D   W   i   d   t   h   -   3   )   /   2   0       -
0012360    1   ,       s   o   :  \r  \t   M   C   o   u   n   t       <
0012400        0       i   f       D   W   i   d   t   h       <       2
0012420    3  \r  \t   M   C   o   u   n   t       =       0       i   f
0012440        2   3       <   =       D   W   i   d   t   h       <    
0012460    4   2   ,       e   t   c   .  \r   E   a   c   h       t   i
0012500    m   e       t   h   e       i   n   n   e   r       l   o   o
0012520    p       t   e   r   m   i   n   a   t   e   s   ,       i   f
0012540        M   C   o   u   n   t   <   0       t   h   e       s   c
0012560    a   n       l   i   n   e       i   s       f   i   n 376 001
0012600   \0   ] 224   i   s   h   e   d   ,  \r   b   u   t       i   f
0012620        M   C   o   u   n   t   >   =   0   ,       M   C   o   u
0012640    n   t       i   s       d   e   c   r   e   m   e   n   t   e
0012660    d   ,       C   n   t       i   s       l   o   a   d   e   d
0012700        w   i   t   h       1   7   ,       a   n   d       t   h
0012720    e  \r   m   a   i   n       l   o   o   p       i   s       r
0012740    e   e   n   t   e   r   e   d       f   o   r       a   n   o
0012760    t   h   e   r       2   0       i   t   e   r   a   t   i   o
0013000    n   s   .  \r  \r   W   h   e   n       w   o   r   k   i   n
0013020    g       l   e   f   t   -   t   o   -   r   i   g   h   t   ,
0013040        t   h   e       s   o   u   r   c   e       m   a   y    
0013060    b   e       t   h   o   u   g   h   t       o   f       a   s
0013100        T   ,   ,   S   r   c   W   d       -   -  \r   t   h   a
0013120    t       i   s   ,       w   i   t   h       T       o   n    
0013140    t   h   e       l   e   f   t       a   n   d       S   r   c
0013160    W   d       o   n       t   h   e       r   i   g   h   t   .
0013200            I 376 001  \0 240   b   n       a   n   y       g   i
0013220    v   e   n       o   p   e   r   a   t   i   o   n   ,  \r   T
0013240        c   o   n   t   a   i   n   s       t   h   e       p   r
0013260    e   v   i   o   u   s       s   o   u   r   c   e       w   o
0013300    r   d       a   n   d       S   r   c   W   d       c   o   n
0013320    t   a   i   n   s       t   h   e       c   u   r   r   e   n
0013340    t       o   n   e   ,       a   n   d  \r   t   h   e       s
0013360    h   i   f   t       o   p   e   r   a   t   i   o   n       c
0013400    o   n   s   i   s   t   s       o   f       l   e   f   t   -
0013420    s   h   i   f   t   i   n   g       T   ,   ,   S   r   c   W
0013440    d       b   y       0       t   o       1   7       b   i   t
0013460    s  \r   (   t   o       a   l   i   g   n       i   t       w
0013500    i   t   h       t   h   e       d   e   s   t   i   n   a   t
0013520    i   o   n   )       a   n   d       s   t   o   r   i   n   g
0013540        t   h   e       l   e   f   t   m   o   s   t       2   0
0013560        b   i   t   s       o   f       t   h   e  \r   r   e   s
0013600    u   l   t   .           S   i 376 001  \0   .   9   n   c   e
0013620        t   h   e       s   h   i   f   t   e   r       i   s    
0013640    a   c   t   u   a   l   l   y       a       c   y   c   l   e
0013660    r       a   n   d       p   r   o   d   u   c   e   s       t
0013700    h   e       r   i   g   h   t   m   o   s   t  \r   2   0    
0013720    b   i   t   s       (   r   a   t   h   e   r       t   h   a
0013740    n       t   h   e       l   e   f   t   m   o   s   t   )    
0013760    o   f       t   h   e       c   y   c   l   e   d       r   e
0014000    s   u   l   t   ,       t   h   e       s   h   i   f   t   e
0014020    r       m   u   s   t  \r   b   e       s   e   t       u   p
0014040        t   o       l   e   f   t   -   c   y   c   l   e       a
0014060    n       a   d   d   i   t   i   o   n   a   l       2   0    
0014100    b   i   t   s       (   b   y       e   x   c   h   a   n   g
0014120    i   n   g       S   H   A       a   n   d       S   H   B   )
0014140    .  \r   H   e   n   c   e       S   H   A   =   R       a   n
0014160    d       S   H   B   =   T   .  \r  \r   W   h   e   n       w
0014200    o   r   k   i   n   g       r   i   g   h   t   - 376 001  \0
0014220    !   G   t   o   -   l   e   f   t   ,       t   h   e       s
0014240    o   u   r   c   e       m   a   y       b   e       t   h   o
0014260    u   g   h   t       o   f       a   s       S   r   c   W   d
0014300    ,   ,   T   ,  \r   w   h   e   r   e       T       c   o   n
0014320    t   a   i   n   s       t   h   e       p   r   e   v   i   o
0014340    u   s       s   o   u   r   c   e       w   o   r   d       a
0014360    n   d       S   r   c   W   d       t   h   e       c   u   r
0014400    r   e   n   t   ,       a   s       b   e   f   o   r   e   .
0014420   \r   T   h   i   s       i   s       e   x   a   c   t   l   y
0014440        s   y   m   m   e   t   r   i   c       w   i   t   h    
0014460    t   h   e       l   e   f   t   -   t   o   -   r   i   g   h
0014500    t       c   a   s   e       a   n   d       r   e   q   u   i
0014520    r   e   s       o   n   l   y  \r   t   h   a   t       S   H
0014540    A       a   n   d       S   H   B       b   e       e   x   c
0014560    h   a   n   g   e   d   .           H   e   n   c   e       S
0014600    H   A   =   T       a   n   d       S   H   B   =   R   .  \r
0014620   \r   R 376 001  \0   / 337   e   g   a   r   d   l   e   s   s
0014640        o   f       t   h   e       d   i   r   e   c   t   i   o
0014660    n   ,       i   f       t   h   e   r   e       a   r   e    
0014700    a   t       l   e   a   s   t       a   s       m   a   n   y
0014720        d   a   t   a       b   i   t   s       i   n       t   h
0014740    e  \r   f   i   r   s   t       w   o   r   d       o   f    
0014760    t   h   e       s   o   u   r   c   e       i   t   e   m    
0015000    a   s       i   n       t   h   e       f   i   r   s   t    
0015020    w   o   r   d       o   f       t   h   e       d   e   s   t
0015040    i   n   a   t   i   o   n       i   t   e   m   ,  \r   t   h
0015060    e   n       a   l   l       t   h   e       d   e   s   t   i
0015100    n   a   t   i   o   n       b   i   t   s       c   o   m   e
0015120        f   r   o   m       S   r   c   W   d       d   u   r   i
0015140    n   g       t   h   e       f   i   r   s   t       s   h   i
0015160    f   t       a   n   d  \r   T       n   e   e   d       n   o
0015200    t       b   e       l   o   a   d   e   d       a   t       a
0015220    l   l   .           O   n 376 001  \0 367 003       t   h   e
0015240        o   t   h   e   r       h   a   n   d   ,       i   f    
0015260    t   h   e   r   e       a   r   e       f   e   w   e   r    
0015300    b   i   t   s  \r   i   n       t   h   e       f   i   r   s
0015320    t       w   o   r   d       o   f       t   h   e       s   o
0015340    u   r   c   e       i   t   e   m   ,       t   h   e       d
0015360    e   s   t   i   n   a   t   i   o   n       b   i   t   s    
0015400    c   o   m   e       f   r   o   m  \r   b   o   t   h       S
0015420    r   c   W   d       a   n   d       T   .           I   n    
0015440    t   h   i   s       c   a   s   e   ,       T       m   u   s
0015460    t       c   o   n   t   a   i   n       t   h   e       f   i
0015500    r   s   t       s   o   u   r   c   e       w   o   r   d    
0015520    a   n   d  \r   S   r   c   W   d       t   h   e       s   e
0015540    c   o   n   d   .           T   h   e   s   e       t   w   o
0015560        s   i   t   u   a   t   i   o   n   s       m   u   s   t
0015600        b   e       d   i   s   t   i   n   g   u   i   s   h   e
0015620    d   ,       s   i   n   c   e       o   n   e 376 001  \0 006
0015640    7  \r   r   e   q   u   i   r   e   s       f   e   t   c   h
0015660    i   n   g       o   n   l   y       a       s   i   n   g   l
0015700    e       w   o   r   d       w   h   e   r   e   a   s       t
0015720    h   e       o   t   h   e   r       r   e   q   u   i   r   e
0015740    s       f   e   t   c   h   i   n   g  \r   t   w   o       w
0015760    o   r   d   s       b   e   f   o   r   e       o   p   e   r
0016000    a   t   i   n   g       t   h   e       s   h   i   f   t   e
0016020    r       f   o   r       t   h   e       f   i   r   s   t    
0016040    t   i   m   e   .  \r  \r   A       s   i   m   i   l   a   r
0016060        s   i   t   u   a   t   i   o   n       a   r   i   s   e
0016100    s       a   t       t   h   e       e   n   d       o   f    
0016120    a   n       i   t   e   m   ;       t   h   a   t       i   s
0016140    ,       a   l   l       t   h   e       b   i   t   s  \r   i
0016160    n       t   h   e       l   a   s   t       p   a   r   t   i
0016200    a   l       d   e   s   t   i   n   a   t   i   o   n       i
0016220    t   e   m       m   a   y       c   o   m   e       f   r   o
0016240    m 376 001  \0 240   _       t   h   e       l   e   f   t   o
0016260    v   e   r       s   o   u   r   c   e  \r   w   o   r   d    
0016300    i   n       T   ,       o   r       i   t       m   a   y    
0016320    b   e       n   e   c   e   s   s   a   r   y       t   o    
0016340    f   e   t   c   h       a   n       a   d   d   i   t   i   o
0016360    n   a   l       w   o   r   d       i   n   t   o       S   r
0016400    c   W   d   .  \r   T   h   e   s   e       s   i   t   u   a
0016420    t   i   o   n   s       m   u   s   t       b   e       d   i
0016440    s   t   i   n   g   u   i   s   h   e   d       a   l   s   o
0016460    .           A   n       e   a   r   l   i   e   r       v   e
0016500    r   s   i   o   n       o   f       t   h   i   s  \r   m   i
0016520    c   r   o   c   o   d   e       o   m   i   t   t   e   d    
0016540    t   h   e       t   e   s   t       a   n   d       s   i   m
0016560    p   l   y       f   e   t   c   h   e   d       t   h   e    
0016600    "   e   x   t   r   a   "       w   o   r   d       a   l   w
0016620    a   y   s   ;  \r   u   n   f   o   r   t   u   n   a   t   e
0016640    l   y   ,       t   h 376 001  \0 232 370   i   s       s   o
0016660    m   e   t   i   m   e   s       r   e   s   u   l   t   e   d
0016700        i   n       t   o   u   c   h   i   n   g       a       w
0016720    o   r   d       o   u   t   s   i   d   e       t   h   e    
0016740    b   i   t       m   a   p   ,  \r   w   h   i   c   h       c
0016760    a   u   s   e   d       p   r   o   b   l   e   m   s       i
0017000    n       a       p   a   g   e   d       e   n   v   i   r   o
0017020    n   m   e   n   t       w   h   e   n       t   h   e       b
0017040    i   t       m   a   p       h   a   p   p   e   n   e   d  \r
0017060    t   o       b   e       p   a   g   e   -   a   l   i   g   n
0017100    e   d   .  \r  \r   T   w   o       b   i   t   s       i   n
0017120        B   B   C   t   r   l       c   o   n   t   r   o   l    
0017140    t   h   e       f   e   t   c   h   i   n   g       o   f    
0017160    t   h   e       "   e   x   t   r   a   "       w   o   r   d
0017200        i   n       t   h   e       a   b   o   v   e  \r   t   w
0017220    o       c   a   s   e   s   .  \r  \f  \r   I   n       t   h
0017240    e       n   o   r   m   a   l       c   a 376 001  \0 344 241
0017260    s   e       i   n       w   h   i   c   h       b   o   t   h
0017300        s   r   c   B   p   l       a   n   d       d   s   t   B
0017320    p   l       a   r   e       m   u   l   t   i   p   l   e   s
0017340        o   f       1   6   ,  \r   t   h   e       S   h   C    
0017360    r   e   g   i   s   t   e   r       a   n   d       a   l   l
0017400        h   o   r   i   z   o   n   t   a   l       l   o   o   p
0017420        c   o   n   t   r   o   l       i   n   f   o   r   m   a
0017440    t   i   o   n       c   a   n       b   e       c   o   m   p
0017460    u   t   e   d  \r   j   u   s   t       o   n   c   e       f
0017500    o   r       a   l   l       s   c   a   n       l   i   n   e
0017520    s   .           I   f       e   i   t   h   e   r       s   r
0017540    c   B   p   l       o   r       d   s   t   B   p   l       i
0017560    s       n   o   t       a       m   u   l   t   i   p   l   e
0017600   \r   o   f       1   6   ,       t   h   i   s       d   o   e
0017620    s   n   '   t       w   o   r   k   ,       a   n   d       a
0017640    l   l       t   h   i   s       s   t   u   f   f       h   a
0017660  376 001  \0   G 351   s       t   o       b   e       r   e   c
0017700    o   m   p   u   t   e   d       f   o   r  \r   e   a   c   h
0017720        s   c   a   n       l   i   n   e   .           I       c
0017740    o   n   s   i   d   e   r       t   h   i   s       c   a   s
0017760    e       t   o       b   e       a   n   o   m   a   l   o   u
0020000    s       -   -       t   h   e       P   r   i   n   c   O   p
0020020    s  \r   s   p   e   c   i   f   i   c   a   t   i   o   n    
0020040    i   s       o   v   e   r   l   y       g   e   n   e   r   a
0020060    l   ,       o   r       p   e   r   h   a   p   s       w   a
0020100    s       m   o   t   i   v   a   t   e   d       b   y       c
0020120    l   e   v   e   r       h   a   c   k   s  \r   s   u   c   h
0020140        a   s       b   e   i   n   g       a   b   l   e       t
0020160    o       B   i   t   B   l   t       p   a   r   a   l   l   e
0020200    l   o   g   r   a   m   s   .           T   h   e   r   e   f
0020220    o   r   e   ,       t   h   i   s       i   m   p   l   e   m
0020240    e   n   t   a   t   i   o   n  \r   t   a   k   e   s       t
0020260    h   e       e   a 376 001  \0 322   i   s   y       w   a   y
0020300        o   u   t       i   n       t   h   i   s       c   a   s
0020320    e       b   y       d   o   i   n   g       j   u   s   t    
0020340    o   n   e       s   c   a   n       l   i   n   e   ,       s
0020360    a   v   i   n   g       s   t   a   t   e  \r   a   s       i
0020400    f       a   n       i   n   t   e   r   r   u   p   t       h
0020420    a   d       o   c   c   u   r   r   e   d   ,       a   n   d
0020440        r   e   s   t   a   r   t   i   n   g       B   i   t   B
0020460    l   t       f   r   o   m       t   h   e       b   e   g   i
0020500    n   n   i   n   g   .  \r   T   h   i   s       i   s       s
0020520    l   o   w       a   s       b   l   a   z   e   s   ,       b
0020540    u   t       t   h   e       u   s   e   r       g   e   t   s
0020560        w   h   a   t       h   e       d   e   s   e   r   v   e
0020600    s   .   .   .   .   .   .   .  \r  \r   A   l   l       t   h
0020620    e       h   o   r   i   z   o   n   t   a   l       l   o   o
0020640    p   s       w   o   r   k       i   n       b   o   t   h    
0020660    d   i   r   e   c   t   i   o   n   s 376 001  \0   h 322    
0020700    b   y       u   s   e       o   f       a       t   r   i   c
0020720    k   :  \r   A   L   U   F   [   1   5   ]       i   s       r
0020740    e   d   e   f   i   n   e   d       t   o       b   e       A
0020760    +   1       i   f       m   o   v   i   n   g       l   e   f
0021000    t   -   t   o   -   r   i   g   h   t       b   u   t       A
0021020    -   1       i   f  \r   r   i   g   h   t   -   t   o   -   l
0021040    e   f   t   .           T   h   i   s       A   L   U       f
0021060    u   n   c   t   i   o   n       i   s       i   n   v   o   k
0021100    e   d       b   y       t   h   e       o   p   e   r   a   t
0021120    i   o   n       "   A   +   /   -   1   "   ,  \r   a   n   d
0021140        i   s       u   s   e   d       t   o       a   d   v   a
0021160    n   c   e       s   o   u   r   c   e       a   n   d       d
0021200    e   s   t   i   n   a   t   i   o   n       p   o   i   n   t
0021220    e   r   s       a   l   o   n   g       t   h   e       s   c
0021240    a   n       l   i   n   e   .  \r   A       c   o   n   s   e
0021260    q   u   e   n   c   e       o   f       t   h   i   s     376
0021300  001  \0 237 205   i   s       t   h   a   t       A   L   U   F
0021320    [   1   5   ]       (   n   o   r   m   a   l   l   y       A
0021340        A   N   D       N   O   T       B   )       c   a   n   n
0021360    o   t       b   e  \r   u   s   e   d       b   y       I   /
0021400    O       t   a   s   k   s   .  \r  \r   B   B   D   s   t    
0021420    a   n   d       B   B   S   r   c       a   r   e       1   6
0021440    -   b   i   t       d   i   s   p   l   a   c   e   m   e   n
0021460    t   s       r   e   l   a   t   i   v   e       t   o       b
0021500    a   s   e       r   e   g   i   s   t   e   r   s  \r   B   B
0021520    D   s   t   B   R       a   n   d       B   B   S   r   c   B
0021540    R   .           I   f       m   o   v   i   n   g       t   o
0021560    p   -   t   o   -   b   o   t   t   o   m       t   h   e   y
0021600        s   t   a   r   t       n   e   a   r       z   e   r   o
0021620   \r   a   n   d       c   o   u   n   t       u   p   ;       i
0021640    f       b   o   t   t   o   m   -   t   o   -   t   o   p    
0021660    t   h   e   y       s   t   a   r   t       a   t       ~   2
0021700    ^   1   5     376 001  \0 372   9   a   n   d       c   o   u
0021720    n   t       d   o   w   n   .  \r   I   f       m   o   r   e
0021740        t   h   a   n       ~   2   ^   1   5       w   o   r   d
0021760    s       o   f       b   i   t       m   a   p       a   r   e
0022000        p   r   o   c   e   s   s   e   d   ,       o   n   e    
0022020    o   f       t   h   e   s   e       d   i   s   p   l   a   c
0022040    e   m   e   n   t   s  \r   b   e   c   o   m   e   s       n
0022060    e   g   a   t   i   v   e   .           T   h   i   s       i
0022100    s       d   e   t   e   c   t   e   d       a   n   d       c
0022120    a   u   s   e   s       B   i   t   B   l   t       t   o    
0022140    r   e   s   t   a   r   t   ,       r   e   c   o   m   p   u
0022160    t   i   n   g  \r   t   h   e       b   a   s   e       r   e
0022200    g   i   s   t   e   r   s       a   n   d       d   i   s   p
0022220    l   a   c   e   m   e   n   t   s   .           B   R       d
0022240    i   s   p   l   a   c   e   m   e   n   t       o   v   e   r
0022260    f   l   o   w       i   s       h   a   n   d   l   e   d  \r
0022300    t   h   i   s       w   a   y     376 001  \0 341 200   b   e
0022320    c   a   u   s   e       i   t       t   a   k   e   s       t
0022340    o   o       m   u   c   h       c   o   d   e       t   o    
0022360    r   e   c   o   m   p   u   t   e       t   h   e       B   R
0022400    s       a   n   d       d   i   s   p   l   a   c   e   m   e
0022420    n   t   s  \r   i   n       m   i   d   -   s   t   r   e   a
0022440    m   .           T   h   e       c   o   s   t       o   f    
0022460    r   e   s   t   a   r   t   i   n   g       B   i   t   B   l
0022500    t       f   r   o   m       s   c   r   a   t   c   h       i
0022520    n       t   h   i   s       c   a   s   e       i   s  \r   u
0022540    n   i   m   p   o   r   t   a   n   t   ,       s   i   n   c
0022560    e       s   u   c   h       a       l   a   r   g   e       a
0022600    m   o   u   n   t       o   f       d   a   t   a       i   s
0022620        i   n   v   o   l   v   e   d   .           (   I   n   d
0022640    e   e   d   ,       i   n  \r   n   o   r   m   a   l       p
0022660    r   o   g   r   a   m   s       a   n       i   n   t   e   r
0022700    r   u   p   t       w   i   l   l       o   c   c   u 376 001
0022720   \0 230   c   r       b   e   f   o   r   e       2   ^   1   5
0022740        w   o   r   d   s       a   r   e       p   r   o   c   e
0022760    s   s   e   d   ,  \r   s   o       B   i   t   B   l   t    
0023000    w   i   l   l       b   e       r   e   s   t   a   r   t   e
0023020    d       a   n   y   w   a   y   .   )  \r  \r   1   6   6    
0023040                        P   I   L   O   T   B   I   T   B   L   T
0023060        0                                   -   1                
0023100                                                        \   P   I
0023120    L   O   T   B   I   T   B   L   T  \r  \r   P   e   r   f   o
0023140    r   m   s       P   i   l   o   t   -   s   t   y   l   e    
0023160    b   i   t   b   l   t   .  \r   T   O   S   -   1       i   s
0023200        a       p   o   i   n   t   e   r       t   o       a    
0023220    b   i   t   b   l   t       t   a   b   l   e   ,       w   h
0023240    i   c   h       i   s       1   6   -   a   l   i   g   n   e
0023260    d   .  \r   T   O   S       n   u   m   b   e   r       o   f
0023300        s   c   a   n       l   i   n   e   s       a   l   r   e
0023320    a   d   y 376 001  \0   G   p       d   o   n   e       (   i
0023340    n   i   t   i   a   l   l   y       0   )  \r  \r   w   h   e
0023360    n       r   e   s   u   m   i   n   g       f   r   o   m    
0023400    i   n   t   e   r   r   u   p   t       o   r       f   a   u
0023420    l   t   ,       t   h   e       T   O   S       c   o   u   n
0023440    t       w   i   l   l       b   e       i   n   c   r   e   m
0023460    e   n   t   e   d       a   p   p   r   o   p   r   i   a   t
0023500    e   l   y   .  \r  \r   T   O   S   :       n   u   m   b   e
0023520    r       o   f       s   c   a   n       l   i   n   e   s    
0023540    a   l   r   e   a   d   y       d   o   n   e   .  \r  \r   B
0023560    i   t   B   l   t       e   x   i   t   s       i   n       o
0023600    n   e       o   f       t   h   r   e   e       w   a   y   s
0023620    :  \r  \r   1   .       N   o   r   m   a   l       c   o   m
0023640    p   l   e   t   i   o   n   :       B   i   t   B   l   t    
0023660    p   o   p   s       t   h   e       s   t   a   c   k  \r  \r
0023700    2   .       I   n   t   e   r   r   u   p   t       r   e   q
0023720    u   e   s   t       p   e   n 376 001  \0 314 344   d   i   n
0023740    g   :       B   i   t   B   l   t       l   e   a   v   e   s
0023760        a   t       T   O   S       t   h   e       n   u   m   b
0024000    e   r       o   f       s   c   a   n       l   i   n   e   s
0024020        a   l   r   e   a   d   y       p   r   o   c   e   s   s
0024040    e   d       a   n   d       b   r   a   n   c   h   e   s    
0024060    t   o       t   h   e       i   n   t   e   r   r   u   p   t
0024100        h   a   n   d   l   e   r   .           B   i   t   B   l
0024120    t       i   s       s   u   b   s   e   q   u   e   n   t   l
0024140    y       r   e   s   t   a   r   t   e   d       w   i   t   h
0024160        t   h   e       v   a   l   u   e       l   e   f   t    
0024200    i   n       T   O   S   .  \r  \r   3   .       P   a   g   e
0024220        f   a   u   l   t   :       B   i   t   B   l   t       i
0024240    s       c   a   r   e   f   u   l       t   o       e   n   s
0024260    u   r   e       r   e   s   t   a   r   t   a   b   i   l   i
0024300    t   y       i   n       t   h   e       f   a   c   e       o
0024320    f       p   a   g   e       f   a   u   l   t   s 376 001  \0
0024340  024 001   .           T   h   a   t       i   s   ,       a   n
0024360    y       t   i   m   e       a       p   a   g   e       f   a
0024400    u   l   t       c   a   n       o   c   c   u   r   ,       T
0024420    O   S       c   o   n   t   a   i   n   s       t   h   e    
0024440    n   u   m   b   e   r       o   f       s   c   a   n       l
0024460    i   n   e   s       a   l   r   e   a   d   y       d   o   n
0024500    e   ,       a   n   d       r   e   s   t   a   r   t   i   n
0024520    g       B   i   t   B   l   t       w   i   t   h       t   h
0024540    a   t       a   r   g   u   m   e   n   t       w   i   l   l
0024560        c   a   u   s   e       t   h   e       c   o   r   r   e
0024600    c   t       t   h   i   n   g       t   o       h   a   p   p
0024620    e   n   .  \r  \r   A   p   p   r   o   x   i   m   a   t   e
0024640        t   i   m   i   n   g       f   o   r       i   n   i   t
0024660    i   a   l   i   z   a   t   i   o   n       a   n   d       c
0024700    l   e   a   n   u   p       (   e   x   c   l   u   d   i   n
0024720    g       m   a   i   n       l   o   o   p   s   )   :  \r  \t
0024740        6 376 001  \0   z 324   5       c   y   c   l   e   s  \r
0024760   \t   +   1   0       i   f       d   i   r   e   c   t   i   o
0025000    n   =   b   a   c   k   w   a   r   d  \r  \t   +   2   9    
0025020    i   f       r   e   s   u   m   i   n   g       f   r   o   m
0025040        i   n   t   e   r   r   u   p   t  \r  \r  \t   +       o
0025060    n   e       o   f       t   h   e       f   o   l   l   o   w
0025100    i   n   g   :  \r  \r  \t   g   r   a   y   :  \t       1   3
0025120        c   y   c   l   e   s       m   i   n   i   m   u   m  \r
0025140   \t  \t       +   6       i   f       r   e   s   u   m   i   n
0025160    g       f   r   o   m       i   n   t   e   r   r   u   p   t
0025200   \r  \t  \t   +   3   7       i   f       r   e   s   u   m   i
0025220    n   g       a   n   d       (   h   e   i   g   h   t   M   i
0025240    n   u   s   O   n   e   +   1   )       i   s       n   o   t
0025260        a       p   o   w   e   r       o   f       2  \r  \r  \t
0025300    ~   g   r   a   y   :  \t       2   1       c   y   c   l   e
0025320    s       m   i   n   i   m   u   m  \r  \t  \t   +   2   9    
0025340    i   f       r   e   s   u 376 001  \0 341 371   m   i   n   g
0025360        f   r   o   m       i   n   t   e   r   r   u   p   t  \r
0025400   \t  \t       +   2       i   f       d   i   r   e   c   t   i
0025420    o   n   =   b   a   c   k   w   a   r   d  \r  \r   T   o   t
0025440    a   l   s   :  \t   g   r   a   y   :  \t   7   8       c   y
0025460    c   l   e   s       m   i   n   i   m   u   m   ,       1   6
0025500    0       m   a   x   i   m   u   m      \r  \t   ~   g   r   a
0025520    y   :  \t   8   6       c   y   c   l   e   s       m   i   n
0025540    i   m   u   m   ,       1   5   6       m   a   x   i   m   u
0025560    m      \r  \r   N   o   t   e   :       t   h   e   s   e    
0025600    o   v   e   r   h   e   a   d   s       a   r   e       i   n
0025620    c   u   r   r   e   d       o   n       e   v   e   r   y    
0025640    s   c   a   n       l   i   n   e       i   f       d   s   t
0025660    .   b   i   t       o   r       s   r   c   .   b   i   t  \r
0025700    i   s       n   o   t       a       m   u   l   t   i   p   l
0025720    e       o   f       1   6   .  \r  \r   S   e   e       c   o
0025740    m   m   e   n   t   s       a   b   o   v   e 376 001  \0   4
0025760  263       m   a   i   n       l   o   o   p   s       f   o   r
0026000        m   a   i   n       l   o   o   p       t   i   m   e   s
0026020    .  \r   %  \r  \f  \r   *   -   -   -   -   -   -   -   -   -
0026040    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0026120    -   -  \r   *       R   -   r   e   g   i   s   t   e   r    
0026140    a   s   s   i   g   n   m   e   n   t   s   :  \r   *   -   -
0026160    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0026240    -   -   -   -   -   -   -   -   -  \r  \r   S   e   t   R   M
0026260    R   e   g   i   o   n   [   B   B   R   e   g   s   ]   ;  \t
0026300    *       T   h   e       R   M   R   e   g   i   o   n       i
0026320    t   s   e   l   f       i   s       d   e   f   i   n   e   d
0026340        i   n       R   e   g   i   s   t   e   r   D   e   f   s
0026360    . 376 001  \0 215 204   m   c  \r  \r   R   V   N   [   B   B
0026400    D   s   t   ]   ;  \t  \t   *       A   d   d   r   e   s   s
0026420        o   f       n   e   x   t       w   o   r   d       t   o
0026440        p   r   o   c   e   s   s  \r   R   V   N   [   B   B   S
0026460    r   c   ]   ;  \r  \r   R   V   N   [   D   s   t   I   n   c
0026500    ]   ;  \t  \t   *       A   d   d   r   e   s   s       i   n
0026520    c   r   e   m   e   n   t       b   e   t   w   e   e   n    
0026540    s   c   a   n       l   i   n   e   s       -   -  \r   R   V
0026560    N   [   S   r   c   I   n   c   ]   ;  \t  \t   *           n
0026600    e   g   a   t   i   v   e       i   f       d   i   r   e   c
0026620    t   i   o   n       =       b   a   c   k   w   a   r   d  \r
0026640   \r   R   V   N   [   D   R   a   s   t   ]   ;  \t  \t   *    
0026660    R   a   s   t   e   r       l   e   n   g   t   h       (   b
0026700    i   t   s   ,       l   a   t   e   r       w   o   r   d   s
0026720    )       -   -  \r   R   V   N   [   S   R   a   s   t   ]   ;
0026740   \t  \t   *           n   e   g   a   t   i   v   e       i   f
0026760        d   i   r   e   c 376 001  \0  \b   ;   t   i   o   n    
0027000    =       b   a   c   k   w   a   r   d  \r  \r   R   V   N   [
0027020    P   r   e   f   D   s   t   ]   ;  \t  \t   *       A   d   d
0027040    r   e   s   s       o   f       n   e   x   t       m   u   n
0027060    c   h       t   o       P   r   e   F   e   t   c   h  \r   R
0027100    V   N   [   P   r   e   f   S   r   c   ]   ;  \r  \r   R   V
0027120    N   [   D   P   r   e   f   O   f   f   s   e   t   ]   ;  \t
0027140    *       O   f   f   s   e   t       o   f       l   e   f   t
0027160    m   o   s   t       w   o   r   d       o   f       n   e   x
0027200    t       s   c   a   n       l   i   n   e       r   e   l   a
0027220    t   i   v   e  \r   R   V   N   [   S   P   r   e   f   O   f
0027240    f   s   e   t   ]   ;  \t   *           t   o       f   i   r
0027260    s   t       w   o   r   d       o   f       c   u   r   r   e
0027300    n   t       s   c   a   n       l   i   n   e  \r  \r   R   V
0027320    N   [   V   C   o   u   n   t   ]   ;  \t  \t   *       V   e
0027340    r   t   i   c   a   l       l   i   n   e       c   o   u   n
0027360    t  \r   R   V   N   [   M   C   o   u   n 376 001  \0   R  \t
0027400    t   ]   ;  \t  \t   *       H   o   r   i   z   o   n   t   a
0027420    l       m   u   n   c   h       c   o   u   n   t  \r   R   V
0027440    N   [   I   C   n   t   ]   ;  \t  \t   *       I   n   i   t
0027460    i   a   l       v   a   l   u   e       o   f       C   n   t
0027500        r   e   g   i   s   t   e   r       f   o   r       w   o
0027520    r   d       l   o   o   p   s  \r  \r   R   V   N   [   B   B
0027540    D   i   s   p   ]   ;  \t  \t   *       C   o   n   t   r   o
0027560    l       f   l   a   g   s       a   n   d       h   o   r   i
0027600    z   o   n   t   a   l       l   o   o   p       d   i   s   p
0027620    a   t   c   h  \r  \t  \t  \t   *       B   0   =   1       =
0027640    >       d   i   r   e   c   t   i   o   n       =       b   a
0027660    c   k   w   a   r   d  \r  \t  \t  \t   *       B   8   :   1
0027700    5       =       d   i   s   p   a   t   c   h       v   a   l
0027720    u   e       r   e   l   a   t   i   v   e       t   o       H
0027740    o   r   i   z   o   n   t   a   l   D   i   s   p  \r  \t  \t
0027760   \t   *       (   s   e   e       b   e   l   o   w       f   o
0030000  376 001  \0 313   G   r       d   e   t   a   i   l   s   )  \r
0030020   \r   R   V   N   [   B   B   C   t   r   l   ]   ;  \t  \t   *
0030040        C   o   n   t   r   o   l       f   l   a   g   s   :  \r
0030060   \t  \t  \t   *       B   0   =   1       =   >       2       s
0030100    o   u   r   c   e       w   o   r   d   s       r   e   q   u
0030120    i   r   e   d       f   o   r       f   i   r   s   t       d
0030140    e   s   t       w   o   r   d  \r  \t  \t  \t   *       B   1
0030160    5   =   1       =   >       2       s   o   u   r   c   e    
0030200    w   o   r   d   s       r   e   q   u   i   r   e   d       f
0030220    o   r       l   a   s   t       d   e   s   t       w   o   r
0030240    d  \r  \r   R   V   N   [   S   r   c   W   d   ]   ;  \t  \t
0030260    *       L   e   f   t   o   v   e   r       s   o   u   r   c
0030300    e       w   o   r   d       -   -       m   u   s   t       b
0030320    e       R   V   R   E   L       1   7  \r  \r   *       A   l
0030340    i   a   s       u   s   e   d       w   h   e   n       t   h
0030360    e       s   o   u   r   c   e       i   s       g   r   a   y
0030400    :  \r   R   M   E 376 001  \0 037 226   [   G   r   a   y   B
0030420    u   m   p   ,       S   R   a   s   t   ]   ;  \t   *       S
0030440    i   z   e       o   f       g   r   a   y       b   r   i   c
0030460    k       i   n       w   o   r   d   s       -   1  \r  \r   *
0030500        A   l   i   a   s   e   s       u   s   e   d       d   u
0030520    r   i   n   g       i   n   i   t   i   a   l   i   z   a   t
0030540    i   o   n   :  \r   R   M   E   [   W   i   d   t   h   ,    
0030560    D   P   r   e   f   O   f   f   s   e   t   ]   ;       *    
0030600    W   i   d   t   h       o   f       i   t   e   m       i   n
0030620        b   i   t   s  \r   R   M   E   [   D   W   i   d   t   h
0030640    ,       I   C   n   t   ]   ;  \t   *       W   i   d   t   h
0030660        o   f       d   e   s   t   i   n   a   t   i   o   n    
0030700    i   t   e   m       i   n       w   o   r   d   s  \r   R   M
0030720    E   [   S   W   i   d   t   h   ,       P   r   e   f   S   r
0030740    c   ]   ;  \t   *       W   i   d   t   h       o   f       s
0030760    o   u   r   c   e       i   t   e   m       i   n       w   o
0031000    r   d   s  \r   R   M   E   [   S   k 376 001  \0   z 310   e
0031020    w   ,       D   s   t   I   n   c   ]   ;  \t   *       D   e
0031040    s   t   i   n   a   t   i   o   n   -   s   o   u   r   c   e
0031060        s   k   e   w   ,       m   o   d       2   0  \r   R   M
0031100    E   [   B   B   M   a   s   k   s   ,       P   r   e   f   D
0031120    s   t   ]   ;  \t   *       L   M   a   s   k       a   n   d
0031140        R   M   a   s   k       v   a   l   u   e   s       t   o
0031160        b   e       l   o   a   d   e   d       i   n   t   o    
0031200    S   H   C  \r   R   M   E   [   B   B   F   l   a   g   s   ,
0031220        S   r   c   I   n   c   ]   ;  \t   *       B   i   t   B
0031240    l   t       f   l   a   g   s       w   o   r   d  \r   R   M
0031260    E   [   D   s   t   X   ,       B   B   D   s   t   ]   ;  \t
0031300    *       D   e   s   t   i   n   a   t   i   o   n       s   t
0031320    a   r   t   i   n   g       X       i   n       b   i   t   s
0031340    ,       l   a   t   e   r       i   n       w   o   r   d   s
0031360   \r   R   M   E   [   S   r   c   X   ,       B   B   S   r   c
0031400    ]   ;  \t   *       S   o   u   r   c   e       s   t   a 376
0031420  001  \0  \0 250   r   t   i   n   g       X       i   n       b
0031440    i   t   s   ,       l   a   t   e   r       i   n       w   o
0031460    r   d   s  \r   R   M   E   [   I   B   B   S   r   c   ,    
0031500    S   P   r   e   f   O   f   f   s   e   t   ]   ;       *    
0031520    I   n   i   t   i   a   l       B   B   S   r   c       (   g
0031540    r   a   y       o   n   l   y   )  \r   R   M   E   [   B   B
0031560    T   e   m   p   ,       S   r   c   W   d   ]   ;  \t   *    
0031600    M   u   s   t       b   e       R   V   R   e   l       1   7
0031620        b   e   c   a   u   s   e       i   t       i   s       a
0031640    n       a   r   g       t   o       M   u   l   S   u   b   .
0031660   \r  \f  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0031700    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0031740    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0031760    *       O   t   h   e   r       d   e   f   i   n   i   t   i
0032000    o   n   s  \r   *   -   -   -   -   -   -   -   -   -   -   -
0032020    -   -   -   - 376 001  \0 351 030   -   -   -   -   -   -   -
0032040    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0032100    -   -   -   -   -  \r  \r   *       B   a   s   e   -   r   e
0032120    g   i   s   t   e   r       a   s   s   i   g   n   m   e   n
0032140    t   s  \r  \r   %       -   -       A   c   t   u   a   l   l
0032160    y       d   e   f   i   n   e   d       i   n       A   D   e
0032200    f   s   .   m   c   .           F   i   r   s   t       t   w
0032220    o       m   u   s   t       b   e       a   n       e   v   e
0032240    n   -   o   d   d       p   a   i   r   .  \r   B   R   [   B
0032260    B   D   s   t   B   R   ,       ?   ]   ;  \t  \t   *       B
0032300    i   t   B   l   t       d   e   s   t   i   n   a   t   i   o
0032320    n       b   a   s   e  \r   B   R   [   B   B   S   r   c   B
0032340    R   ,       ?   ]   ;  \t  \t   *       B   i   t   B   l   t
0032360        s   o   u   r   c   e       b   a   s   e  \r   B   R   [
0032400    B   B   T   a   b   l   e   B   R   ,       ?   ]   ;  \t  \t
0032420    *       S   c   r   a   t   c   h 376 001  \0   > 210       (
0032440    e   m   u   l   a   t   o   r       u   s   e       o   n   l
0032460    y   )  \r   %  \r   B   R   [   B   B   T   a   b   l   e   B
0032500    R   ,       1   3   ]   ;  \r  \r   *       A   L   U       f
0032520    u   n   c   t   i   o   n   s       d   e   f   i   n   e   d
0032540        b   y       B   i   t   B   l   t   .  \r   *       T   h
0032560    e       A   L   U   F       R   a   m       i   s       l   o
0032600    a   d   e   d       b   y       B   i   t   B   l   t       w
0032620    i   t   h       t   h   e       d   e   s   i   r   e   d    
0032640    o   p   e   r   a   t   i   o   n   s   .  \r   X   A   L   U
0032660    O   P   [   ,   B   B   O   p   ,   ,   1   7   ,   E   ]   ;
0032700   \t   *       A       B   B   O   p       B       -   -       l
0032720    o   g   i   c   a   l       o   p   e   r   a   t   i   o   n
0032740        i   n   v   o   k   e   d       w   i   t   h       s   h
0032760    i   f   t   e   r  \r  \r   X   A   O   P   [   ,   +   /   -
0033000    1   ,   1   5   ,   E   ]   ;  \t   *       A       +   /   -
0033020    1       -   -       A   +   1       o   r       A   - 376 001
0033040   \0 346   z   1       d   e   p   e   n   d   i   n   g       o
0033060    n       h   o   r   i   z   o   n   t   a   l  \r  \t  \t  \t
0033100    *       d   i   r   e   c   t   i   o   n   .           T   h
0033120    i   s       v   a   l   u   e       o   f       A   L   U   F
0033140        i   s       n   o   r   m   a   l   l   y  \r  \t  \t  \t
0033160    *       A       A   N   D       N   O   T       B       a   n
0033200    d       i   s       r   e   s   t   o   r   e   d       b   y
0033220        B   i   t   B   l   t       w   h   e   n       d   o   n
0033240    e   .  \r  \t  \t  \t   *       T   h   i   s       m   e   a
0033260    n   s   ,       h   o   w   e   v   e   r   ,       t   h   a
0033300    t       A       A   N   D       N   O   T       B       c   a
0033320    n   n   o   t       b   e       u   s   e   d  \r  \t  \t  \t
0033340    *       b   y       o   t   h   e   r       t   a   s   k   s
0033360    .  \r  \r  \r   *       L   a   y   o   u   t       o   f    
0033400    B   B   D   i   s   p       r   e   g   i   s   t   e   r   :
0033420   \r   *       B   0       =       0       i   f       d   i   r
0033440    e   c   t 376 001  \0 342 353   i   o   n       =       f   o
0033460    r   w   a   r   d   ,       1       i   f       b   a   c   k
0033500    w   a   r   d  \r   *       B   8   -   1   5   :       B   i
0033520    g   B   D   i   s   p   a   t   c   h       v   a   l   u   e
0033540        f   o   r       s   e   t   u   p       a   n   d       b
0033560    o   d   y       d   i   s   p   a   t   c   h   e   s   .  \r
0033600    *       T   h   e       f   o   l   l   o   w   i   n   g    
0033620    a   d   d   r   e   s   s   i   n   g       c   o   n   s   t
0033640    r   a   i   n   t   s       a   p   p   l   y   :  \r   *    
0033660    (   1   )       B   1   3       =       1       a   n   d    
0033700    B   1   5       =       1       i   f       a       r   e   a
0033720    l       s   o   u   r   c   e       b   i   t       m   a   p
0033740        i   s       u   s   e   d       (   0       i   f       g
0033760    r   a   y       b   l   o   c   k   )   .  \r   *       (   2
0034000    )       B   1   4       =       0       i   f       t   h   e
0034020        i   t   e   m   (   s   )       m   u   s   t       b   e
0034040        t   o   u   c   h   e   d 376 001  \0 370 274       b   e
0034060    f   o   r   e       b   e   g   i   n   n   i   n   g       a
0034100        t   r   a   n   s   f   e   r   .  \r   *       (   3   )
0034120        B   1   1       =       1       i   f       t   h   e    
0034140    d   e   s   t   i   n   a   t   i   o   n       i   s       a
0034160    n       o   p   e   r   a   n   d   .  \r   *       (   4   )
0034200        C   e   r   t   a   i   n       t   a   r   g   e   t   s
0034220        a   r   e       t   i   e   d       t   o   g   e   t   h
0034240    e   r       b   y       C   a   l   l       c   o   n   s   t
0034260    r   a   i   n   t   s   .  \r   *       (   5   )       M   u
0034300    s   t       n   o   t       s   t   o   m   p       o   n    
0034320    t   o   o       m   a   n   y       J   C   N       c   o   n
0034340    d   i   t   i   o   n   a   l       b   r   a   n   c   h    
0034360    t   a   r   g   e   t   s   .  \r   *       T   h   e   s   e
0034400        b   i   t   s       a   r   e       r   a   t   h   e   r
0034420        c   a   r   e   f   u   l   l   y       s   e   l   e   c
0034440    t   e   d       t   o       p   e   r   m   i   t 376 001  \0
0034460    > 006       t   h   e       s   a   m   e       B   B   D   i
0034500    s   p       t   o       b   e  \r   *       u   s   e   d    
0034520    i   n       t   h   r   e   e       d   i   f   f   e   r   e
0034540    n   t       d   i   s   p   a   t   c   h   e   s   .  \r  \r
0034560    S   e   t   [   S   r   c   F   l   g   ,       5   ]   ;  \r
0034600    S   e   t   [   N   o   T   o   u   c   h   F   l   g   ,    
0034620    2   ]   ;  \r   S   e   t   [   D   s   t   F   l   g   ,    
0034640    2   0   ]   ;  \r  \r   *       B   B   D   i   s   p   X    
0034660    d   e   f   i   n   e   s       t   h   e       p   a   g   e
0034700        u   s   e   d       f   o   r       d   i   s   p   a   t
0034720    c   h   e   s       o   n       B   B   D   i   s   p   .  \r
0034740    S   e   t   [   B   B   D   i   s   p   X   ,       3   4   0
0034760    0   ]   ;  \r   M   [   B   B   A   t   ,       A   t   [   B
0035000    B   D   i   s   p   X   ,       A   d   d   [   #   1   ,    
0035020    #   2   ]   ]   ]   ;  \r  \r   *       P   a   g   e   -   r
0035040    e   l   a   t   i   v   e       e   n   t   r   y       p   o
0035060    i   n 376 001  \0 006 333   t   s       f   o   r       s   e
0035100    t   u   p       r   o   u   t   i   n   e   s   .  \r   *    
0035120    A   l   l       m   u   s   t       h   a   v   e       B   1
0035140    1       =       1   ,       t   o       n   e   u   t   r   a
0035160    l   i   z   e       b   o   d   y       d   i   s   p   a   t
0035200    c   h       (   D   s   t   F   l   a   g   )   .  \r   S   e
0035220    t   [   G   r   a   y   D   s   t   S   e   t   u   p   &   T
0035240    o   u   c   h   L   o   c   ,       7   0   ]   ;  \r   S   e
0035260    t   [   G   r   a   y   D   s   t   S   e   t   u   p   L   o
0035300    c   ,       7   2   ]   ;  \r   S   e   t   [   S   r   c   D
0035320    s   t   S   e   t   u   p   &   T   o   u   c   h   L   o   c
0035340    ,       7   5   ]   ;  \r   S   e   t   [   S   r   c   D   s
0035360    t   S   e   t   u   p   L   o   c   ,       7   7   ]   ;  \t
0035400    *       M   u   s   t       b   e       S   r   c   D   s   t
0035420    S   e   t   u   p   &   T   o   u   c   h   L   o   c       +
0035440        2  \r  \r   S   e   t   [   H   o   r   i   z   o   n   t
0035460    a   l   D   i   s   p   L 376 001  \0 235 365   o   c   ,    
0035500    7   0   ]   ;  \t   *       T   a   r   g   e   t       o   f
0035520        s   e   t   u   p       d   i   s   p   a   t   c   h  \r
0035540   \r   *       P   a   g   e   -   r   e   l   a   t   i   v   e
0035560        e   n   t   r   y       p   o   i   n   t   s       f   o
0035600    r       b   o   d   y       r   o   u   t   i   n   e   s   .
0035620   \r   *       E   a   c   h       p   a   i   r       m   u   s
0035640    t       d   i   f   f   e   r       o   n   l   y       i   n
0035660        t   h   e       v   a   l   u   e       o   f       D   s
0035700    t   F   l   a   g   ,       a   n   d       t   h   e       a
0035720    d   d   r   e   s   s   e   s  \r   *       m   u   s   t    
0035740    n   e   u   t   r   a   l   i   z   e       a   n   y       o
0035760    n   e       b   i   t   s       t   h   a   t       m   a   y
0036000        h   a   v   e       b   e   e   n       p   r   e   s   e
0036020    n   t       f   o   r       s   e   t   u   p       d   i   s
0036040    p   a   t   c   h   .  \r   S   e   t   [   G   r   a   y   B
0036060    o   d   y   L   o   c   ,       1   2   ]   ; 376 001  \0 220
0036100    +  \r   S   e   t   [   G   r   a   y   D   s   t   B   o   d
0036120    y   L   o   c   ,       3   2   ]   ;  \r  \r   S   e   t   [
0036140    S   r   c   B   o   d   y   L   o   c   ,       1   7   ]   ;
0036160   \t  \t   *       T   h   e   s   e       m   u   s   t       b
0036200    e       x   x   x   x   1   1   1   1       b   e   c   a   u
0036220    s   e       t   h   e   y       c   o   n   t   a   i   n  \r
0036240    S   e   t   [   S   r   c   D   s   t   B   o   d   y   L   o
0036260    c   ,       3   7   ]   ;  \t  \t   *           c   o   n   d
0036300    i   t   i   o   n   a   l       C   a   l   l       i   n   s
0036320    t   r   u   c   t   i   o   n   s  \r  \f  \r   *   -   -   -
0036340    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0036420    -   -   -   -   -   -   -   -  \r   o   p   B   I   T   B   L
0036440    T   :  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0036460    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0036500    - 376 001  \0 334   a   -   -   -   -   -   -   -   -   -   -
0036520    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0036540    -   -   -   -  \r  \t   T   _       (   2   c   )   ;  \r  \t
0036560    S   t   k   P   _       T   ;  \t  \t   *       s   e   t    
0036600    u   p       S   t   k   P       f   o   r       u   s   e    
0036620    i   n   t   e   r   n   a   l   l   y  \r  \t   T   _       (
0036640    T   S   P   )       -       1   ;  \r  \t   T   _       (   f
0036660    e   t   c   h   _       T   )       -       (   2   c   )   ;
0036700   \t   *       f   e   t   c   h       N   S   c   a   n   L   i
0036720    n   e   s  \r  \t   S   t   a   c   k       _       M   D   ,
0036740        T   _       (   f   e   t   c   h   _       T   )       -
0036760        1   ;  \r  \t   T   _       M   d   ,       f   e   t   c
0037000    h   _       T   ;  \t   *       f   e   t   c   h       b   i
0037020    t   b   l   t       t   a   b   l   e  \r  \t   m   e   m   B
0037040    a   s   e   _       B   B   T   a   b   l   e   B   R   ;    
0037060   \r  \t   B   r   L   o   _       T   ,       T   _       M   d
0037100    ;  \r  \t   B   r   H 376 001  \0 274   *   i   _       T   ;
0037120   \t  \t   *       B   B   T   a   b   l   e   B   R       n   o
0037140    w       p   o   i   n   t   s       t   o       B   i   t   B
0037160    l   t   A   r   g  \r  \r  \t   P   A   G   E   F   A   U   L
0037200    T   O   K   ;  \r  \r  \t   R   B   a   s   e   _       R   B
0037220    a   s   e   [   B   B   R   e   g   s   ]   ;  \r  \t   F   E
0037240    T   C   H   _       B   B   .   f   l   a   g   s   ;  \t   *
0037260        c   a   n       f   a   u   l   t  \r  \t   B   B   F   l
0037300    a   g   s   _       M   D   ,       F   e   t   c   h   _    
0037320    B   B   .   h   e   i   g   h   t   ;  \r  \r  \t   T   _    
0037340    (   P   S   .   I   N   B   I   T   B   L   T   )   ;  \t   *
0037360        f   l   a   g       f   o   r       p   a   g   e   f   a
0037400    u   l   t  \r  \t   P   S   T   A   T   E   _       T   ;  \r
0037420   \r   *       D   i   s   p   a   t   c   h       o   n       g
0037440    r   a   y   ,       s   r   c   F   u   n   c   ,       d   s
0037460    t   F   u   n   c  \r  \t   T   _       L   D   F   [   B   B
0037500    F   l   a   g   s   ,       4   ,       1 376 001  \0 027 316
0037520    1   ]   ;  \r  \t   B   i   g   B   D   i   s   p   a   t   c
0037540    h   _       T   ;  \r  \t   B   r   a   n   c   h   [   B   B
0037560    F   u   n   c   t   i   o   n   T   a   b   l   e   ]   ;  \r
0037600   \r   *   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0037620    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0037660    -   -   -   -   -   -   -   -   -   -   -   -   -  \r   B   B
0037700    F   u   n   c   t   i   o   n   T   a   b   l   e   :       D
0037720    i   s   p   T   a   b   l   e   [   2   0   ]   ;  \t  \t   *
0037740        g   r   a   y   ,       s   r   c   F   u   n   c   ,    
0037760    d   s   t   F   u   n   c   ,       A   L   U       o   p  \r
0040000   \t   T   _       1   C   ,       B   r   a   n   c   h   [   B
0040020    B   F   C   ]   ;  \t  \t   *       0   ,       0   ,       0
0040040   \t   N   O   T       A  \r  \t   T   _       2   1   C   ,    
0040060    B   r   a   n   c   h   [   B   B   F   D   ]   ;  \t  \t   *
0040100        0   ,       0   ,       1  \t   N   O   T       A       A
0040120  376 001  \0   $   K   N   D       B  \r  \t   T   _       5   C
0040140    ,       B   r   a   n   c   h   [   B   B   F   D   ]   ;  \t
0040160   \t   *       0   ,       0   ,       2  \t   N   O   T       A
0040200        O   R       B  \r  \t   T   _       1   5   C   ,       B
0040220    r   a   n   c   h   [   B   B   F   D   &   T   ]   ;  \t  \t
0040240    *       0   ,       0   ,       3  \t   A       E   Q   V    
0040260    B  \r  \t   T   _       3   7   C   ,       B   r   a   n   c
0040300    h   [   B   B   F   C   ]   ;  \t  \t   *       0   ,       1
0040320    ,       0  \t   A  \r  \t   T   _       3   5   C   ,       B
0040340    r   a   n   c   h   [   B   B   F   D   ]   ;  \t  \t   *    
0040360    0   ,       1   ,       1  \t   A       A   N   D       B  \r
0040400   \t   T   _       2   7   C   ,       B   r   a   n   c   h   [
0040420    B   B   F   D   ]   ;  \t  \t   *       0   ,       1   ,    
0040440    2  \t   A       O   R       B  \r  \t   T   _       2   3   C
0040460    ,       B   r   a   n   c   h   [   B   B   F   D   &   T   ]
0040500    ;  \t  \t   *       0   ,       1   ,       3  \t   A       X
0040520    O   R       B  \r 376 001  \0 025 200  \t   T   _       1   C
0040540    ,       B   r   a   n   c   h   [   B   B   F   A   ]   ;  \t
0040560   \t   *       1   ,       0   ,       0  \t   N   O   T       A
0040600   \r  \t   T   _       2   1   C   ,       B   r   a   n   c   h
0040620    [   B   B   F   B   ]   ;  \t  \t   *       1   ,       0   ,
0040640        1  \t   N   O   T       A       A   N   D       B  \r  \t
0040660    T   _       5   C   ,       B   r   a   n   c   h   [   B   B
0040700    F   B   ]   ;  \t  \t   *       1   ,       0   ,       2  \t
0040720    N   O   T       A       O   R       B  \r  \t   T   _       1
0040740    5   C   ,       B   r   a   n   c   h   [   B   B   F   B   &
0040760    T   ]   ;  \t  \t   *       1   ,       0   ,       3  \t   A
0041000        E   Q   V       B  \r  \t   T   _       3   7   C   ,    
0041020    B   r   a   n   c   h   [   B   B   F   A   ]   ;  \t  \t   *
0041040        1   ,       1   ,       0  \t   A  \r  \t   T   _       3
0041060    5   C   ,       B   r   a   n   c   h   [   B   B   F   B   ]
0041100    ;  \t  \t   *       1   ,       1   ,       1  \t   A       A
0041120    N   D       B  \r  \t   T   _       2 376 001  \0 355 353   7
0041140    C   ,       B   r   a   n   c   h   [   B   B   F   B   ]   ;
0041160   \t  \t   *       1   ,       1   ,       2  \t   A       O   R
0041200        B  \r  \t   T   _       2   3   C   ,       B   r   a   n
0041220    c   h   [   B   B   F   B   &   T   ]   ;  \t  \t   *       1
0041240    ,       1   ,       3  \t   A       X   O   R       B  \r   *
0041260    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0041340    -   -   -   -   -   -   -   -   -   -   -  \r  \r   *       S
0041360    e   l   e   c   t       t   h   e       a   p   p   r   o   p
0041400    r   i   a   t   e       d   i   s   p   a   t   c   h       w
0041420    o   r   d       f   o   r       t   h   e       f   u   n   c
0041440    t   i   o   n   .  \r   B   B   F   A   :  \t   B   B   D   i
0041460    s   p   _       A   d   d   [   N   o   T   o   u   c   h   F
0041500    l   g   ]   C   ,       B   r   a   n   c   h   [   S   e   t
0041520    B   B   F   ]   ;  \r   B   B   F   B   :  \t   B   B   D 376
0041540  001  \0 255   )   i   s   p   _       A   d   d   [   D   s   t
0041560    F   l   g   ,       N   o   T   o   u   c   h   F   l   g   ]
0041600    C   ,       B   r   a   n   c   h   [   S   e   t   B   B   F
0041620    ]   ;  \r   B   B   F   B   &   T   :  \t   B   B   D   i   s
0041640    p   _       A   d   d   [   D   s   t   F   l   g   ]   C   ,
0041660        B   r   a   n   c   h   [   S   e   t   B   B   F   ]   ;
0041700   \r   B   B   F   C   :  \t   B   B   D   i   s   p   _       A
0041720    d   d   [   S   r   c   F   l   g   ,       N   o   T   o   u
0041740    c   h   F   l   g   ]   C   ,       B   r   a   n   c   h   [
0041760    S   e   t   B   B   F   ]   ;  \r   B   B   F   D   :  \t   B
0042000    B   D   i   s   p   _       A   d   d   [   S   r   c   F   l
0042020    g   ,       D   s   t   F   l   g   ,       N   o   T   o   u
0042040    c   h   F   l   g   ]   C   ,       B   r   a   n   c   h   [
0042060    S   e   t   B   B   F   ]   ;  \r   B   B   F   D   &   T   :
0042100   \t   B   B   D   i   s   p   _       A   d   d   [   S   r   c
0042120    F   l   g   ,       D   s   t   F   l   g   ]   C   ,       B
0042140    r   a   n   c 376 001  \0   e 224   h   [   S   e   t   B   B
0042160    F   ]   ;  \r  \r   S   e   t   B   B   F   :  \t   A   L   U
0042200    F   M   R   W   _       T   ,       A   L   U   F   [   1   7
0042220    ]   ,  \t  \t   *       S   e   t       A   L   U       f   u
0042240    n   c   t   i   o   n  \r  \t  \t   T   _       M   D   ;  \t
0042260   \t  \t   *       T   _       h   e   i   g   h   t       i   n
0042300        s   c   a   n       l   i   n   e   s  \r  \r   *       V
0042320    C   o   u   n   t   _       (   s   c   a   n       l   i   n
0042340    e   s       l   e   f   t       t   o       d   o   )   -   1
0042360    .           S   t   a   c   k       h   a   s       s   c   a
0042400    n       l   i   n   e   s       a   l   r   e   a   d   y    
0042420    d   o   n   e   .  \r  \t   V   C   o   u   n   t   _       T
0042440    -   (   S   t   a   c   k   )   -   1   ;  \t  \t   *       h
0042460    e   i   g   h   t       -       (   s   c   a   n       l   i
0042500    n   e   s       d   o   n   e   )       -   1  \r  \f  \r   *
0042520    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0042540    -   -   -   -   -   -   -   -   - 376 001  \0   * 024   -   -
0042560    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0042620   \r   *       S   e   t       u   p       d   e   s   t   i   n
0042640    a   t   i   o   n       b   a   s   e       a   d   d   r   e
0042660    s   s  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0042700    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0042740    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0042760   \r   *       R   e   g   i   s   t   e   r   s       i   n    
0043000    u   s   e   :       (   p   e   r   m   a   n   e   n   t   )
0043020        B   B   D   i   s   p   ,       V   C   o   u   n   t   ;
0043040        (   t   e   m   p   o   r   a   r   y   )       B   B   F
0043060    l   a   g   s   .  \r  \r  \t   T   _       (   F   e   t   c
0043100    h   _       B   B   .   d   s   t   B   p   l   )   -   1   ,
0043120        B   r   a   n   c   h   [   B   i   t   B   l   t   D   o
0043140    n   e   1   ,       A   L   U   <   0   ]   ;  \r  \t 376 001
0043160   \0 241 246   F   e   t   c   h   _       T   ,       D   R   a
0043200    s   t   _       M   D   ;  \t  \t   *       D   R   a   s   t
0043220    _       b   i   t   s       p   e   r       l   i   n   e  \r
0043240   \t   P   D   _       (   D   R   a   s   t   )       A   N   D
0043260        (   1   7   C   )   ;  \t  \t   *       S   e   e       i
0043300    f       i   n   t   e   g   r   a   l       w   o   r   d   s
0043320        p   e   r       l   i   n   e  \r  \t   T   _       S   t
0043340    a   c   k   ,       B   r   a   n   c   h   [   .   +   2   ,
0043360        A   L   U   =   0   ]   ;  \r  \t   T   _       S   t   a
0043400    c   k   ,       R   e   s   c   h   e   d   u   l   e   ;  \t
0043420   \t   *       N   o   ,       p   r   o   c   e   s   s       o
0043440    n   l   y       o   n   e       s   c   a   n       l   i   n
0043460    e  \r  \t   Q   _       T   ,       B   r   a   n   c   h   [
0043500    D   s   t   M   u   l   t   ]   ;   *   #   #   #   ,       A
0043520    L   U   #   0   ]   ;  \t   *       B   r   a   n   c   h    
0043540    i   f       r   e   s   u   m   i   n   g       f   r   o   m
0043560        i   n 376 001  \0 205   ^   t   e   r   r   u   p   t  \r
0043600   \r  \t   T   _       (   F   e   t   c   h   _       B   B   .
0043620    d   s   t   L   o   )   +   1   ,       D   s   t   X   _    
0043640    M   D   ;       *       D   s   t   X   _       d   s   t   .
0043660    b   i   t  \r  \t   T   _       M   D   ,       F   e   t   c
0043700    h   _       T   ;  \t  \t   *       T   _       l   o   w    
0043720    b   a   s   e       w   o   r   d       a   d   d   r   e   s
0043740    s  \r  \t   B   B   T   e   m   p   _       M   D   ,       B
0043760    r   a   n   c   h   [   D   s   t   S   e   t   u   p   B   R
0044000    ]   ;  \t   *       B   B   T   e   m   p   _       h   i   g
0044020    h       b   a   s   e       w   o   r   d       a   d   d   r
0044040    e   s   s  \r  \r   *       F   o   l   l   o   w   i   n   g
0044060        g   a   r   b   a   g   e       i   s       o   n   l   y
0044100        e   x   e   c   u   t   e   d       w   h   e   n       r
0044120    e   s   u   m   i   n   g       B   i   t   B   l   t       f
0044140    r   o   m       a   n       i   n   t   e   r   r   u   p   t
0044160   \r   *       o   r       f   a 376 001  \0 236 020   u   l   t
0044200    .           W   e       m   u   s   t       c   o   m   p   u
0044220    t   e       t   h   e       b   a   s   e       a   d   d   r
0044240    e   s   s       f   o   r       t   h   e       n   e   x   t
0044260        s   c   a   n       l   i   n   e   .  \r   *       n   .
0044300    b   .       o   u   r       l   i   f   e       i   s       m
0044320    a   d   e       v   e   r   y       d   i   f   f   i   c   u
0044340    l   t       b   y       t   h   e       p   r   e   s   e   n
0044360    c   e       o   f       t   h   e       B   i   t   A   d   d
0044400    r   e   s   s  \r   *       s   t   r   u   c   t   u   r   e
0044420        a   n   d       t   h   e       s   p   e   c   i   f   i
0044440    c   a   t   i   o   n       o   f       b   i   t       m   a
0044460    p       w   i   d   t   h       i   n       b   i   t   s    
0044500    r   a   t   h   e   r       t   h   a   n       w   o   r   d
0044520    s   ,  \r   *       t   o       s   a   y       n   o   t   h
0044540    i   n   g       o   f       f   e   a   t   u   r   e   s    
0044560    s   u   c   h       a   s       b   i   t   s   / 376 001  \0
0044600  316 355   l   i   n   e       b   e   i   n   g       n   e   g
0044620    a   t   i   v   e       i   f       d   i   r   e   c   t   i
0044640    o   n       =  \r   *       b   a   c   k   w   a   r   d   s
0044660    .           I       a   s   s   u   m   e       t   h   e   s
0044700    e       w   e   r   e       i   n   t   e   n   d   e   d    
0044720    t   o       h   e   l   p       t   h   e       D   o   l   p
0044740    h   i   n       i   m   p   l   e   m   e   n   t   a   t   i
0044760    o   n   ,  \r   *       b   u   t       t   h   e   y       a
0045000    r   e       d   e   f   i   n   i   t   e   l   y       n   o
0045020    t       h   e   l   p   f   u   l   !           A   l   t   o
0045040        B   i   t   B   l   t       b   o   t   h       h   a   d
0045060        a       c   l   e   a   n   e   r  \r   *       i   n   t
0045100    e   r   f   a   c   e       a   n   d       w   a   s       e
0045120    a   s   i   e   r       t   o       i   m   p   l   e   m   e
0045140    n   t   .  \r   D   s   t   M   u   l   t   :  \r  \t   D   s
0045160    t   X   _       M   D   ;  \r  \t   T   _       D   R   a   s
0045200    t   , 376 001  \0   $ 376       C   a   l   l   [   M   u   l
0045220    S   u   b   ]   ;  \t  \t   *       T   ,   ,   Q       _    
0045240    Q   *   T   ,       c   l   o   b   b   e   r   s       B   B
0045260    T   e   m   p  \r  \r   *       N   o   w       h   a   v   e
0045300        3   2   -   b   i   t       b   i   t       o   f   f   s
0045320    e   t       i   n       T   ,   ,   Q   .           A   d   d
0045340        i   t       t   o       b   i   t       m   a   p       b
0045360    a   s   e       a   d   d   r   e   s   s   .  \r  \t   F   e
0045400    t   c   h   _       B   B   .   d   s   t   L   o   ,       D
0045420    R   a   s   t   ,       B   r   a   n   c   h   [   .   +   2
0045440    ,       R   >   =   0   ]   ;       *       D   s   t   X   _
0045460        d   s   t   .   b   i   t  \r  \t   T   _       T   -   (
0045500    S   t   a   c   k   )   ;  \t  \t  \t   *       D   R   a   s
0045520    t       n   e   g   a   t   i   v   e   ,       a   d   j   u
0045540    s   t       h   i   g   h       r   e   s   u   l   t  \r  \t
0045560   \t  \t  \t  \t   *       t   o       m   a   k   e       i   t
0045600        3   2   -   b   i   t 376 001  \0   ~ 325       2   '   s
0045620        c   o   m   p   l   e   m   e   n   t  \r  \t   D   s   t
0045640    X   _       (   D   s   t   X   )   +   Q   ;  \t  \t  \t   *
0045660        A   d   d       l   o   w       b   i   t       o   f   f
0045700    s   e   t       t   o       d   s   t   .   b   i   t  \r  \t
0045720    T   _       B   B   T   e   m   p   _       A   _       T   ,
0045740        X   o   r   S   a   v   e   d   C   a   r   r   y   ;  \t
0045760    *       B   B   T   e   m   p   _       h   i   g   h       b
0046000    i   t       o   f   f   s   e   t  \r  \t   T   _       R   C
0046020    Y   [   T   ,       D   s   t   X   ,       4   ]   ;  \t  \t
0046040    *       C   o   n   v   e   r   t       t   o       w   o   r
0046060    d       o   f   f   s   e   t  \r  \t   T   _       T   +   M
0046100    D   ;  \t  \t  \t   *       A   d   d       t   o       l   o
0046120    w       b   a   s   e       w   o   r   d       a   d   d   r
0046140    e   s   s  \r  \t   D   s   t   X   _       (   D   s   t   X
0046160    )       A   N   D       (   1   7   C   )   ;  \t  \t   *    
0046200    M   a   s   k       n   e   w       B   i   t 376 001  \0   $
0046220  311   A   d   d   r   e   s   s   .   b   i   t  \r  \t   F   e
0046240    t   c   h   _       B   B   .   d   s   t   H   i   ;  \r  \t
0046260    B   B   T   e   m   p   _       R   S   H   [   B   B   T   e
0046300    m   p   ,       4   ]   ;  \t  \t   *       B   B   T   e   m
0046320    p   _       h   i   g   h       w   o   r   d       o   f   f
0046340    s   e   t  \r  \t   B   B   T   e   m   p   _       (   B   B
0046360    T   e   m   p   )   +   M   D   ,       X   o   r   S   a   v
0046400    e   d   C   a   r   r   y   ;       *       A   d   d       t
0046420    o       h   i   g   h       b   a   s   e       w   o   r   d
0046440        a   d   d   r   e   s   s  \r  \r   *       T   o   g   e
0046460    t   h   e   r       a   g   a   i   n       h   e   r   e   .
0046500            N   o   w       B   B   T   e   m   p   ,   ,   T    
0046520    =       a   d   j   u   s   t   e   d       b   a   s   e    
0046540    v   a   l   u   e   .  \r   D   s   t   S   e   t   u   p   B
0046560    R   :  \r  \t   M   e   m   B   a   s   e   _       B   B   D
0046600    s   t   B   R   ,       D   R   a   s   t   ,       B   r   a
0046620    n 376 001  \0 202  \0   c   h   [   D   s   t   R   e   a   l
0046640    l   y   S   e   t   u   p   B   R   ,       R   >   =   0   ]
0046660    ;  \r  \r   *       P   r   o   c   e   s   s   i   n   g    
0046700    b   o   t   t   o   m   -   t   o   -   t   o   p   .  \r   *
0046720        D   e   c   r   e   a   s   e       b   a   s   e       b
0046740    y       2   ^   1   5   ,       a   n   d       (   l   a   t
0046760    e   r   )       i   n   c   r   e   a   s   e       i   n   i
0047000    t   i   a   l       d   i   s   p   l   a   c   e   m   e   n
0047020    t       b   y       2   ^   1   5   .  \r  \t   T   _       T
0047040    -   (   1   0   0   0   0   0   C   )   ;  \r  \t   B   B   T
0047060    e   m   p   _       (   B   B   T   e   m   p   )   -   1   ,
0047100        X   o   r   S   a   v   e   d   C   a   r   r   y   ;  \r
0047120   \t   B   B   D   i   s   p   _       (   B   B   D   i   s   p
0047140    )       O   R       (   1   0   0   0   0   0   C   )   ;  \t
0047160    *       S   e   t       f   l   a   g       t   o       r   e
0047200    m   e   m   b   e   r       d   i   r   e   c   t   i   o   n
0047220   \r  \r   *       N   o 376 001  \0   u 364   w       f   i   n
0047240    a   l   l   y       r   e   a   d   y       t   o       l   o
0047260    a   d       t   h   e       b   a   s   e       r   e   g   i
0047300    s   t   e   r   !  \r   D   s   t   R   e   a   l   l   y   S
0047320    e   t   u   p   B   R   :  \r  \t   B   R   L   o   _       T
0047340    ;  \r  \t   B   R   H   i   _       B   B   T   e   m   p   ;
0047360   \r  \f  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0047400    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0047440    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0047460    *       S   e   t       u   p       s   o   u   r   c   e    
0047500    b   a   s   e       a   d   d   r   e   s   s  \r   *   -   -
0047520    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0047600    -   -   -   -   -   -   -   -   -  \r  \r   *       R   e   g
0047620    i   s   t   e   r   s       i   n       u 376 001  \0   B   M
0047640    s   e   :       (   p   e   r   m   a   n   e   n   t   )    
0047660    B   B   D   i   s   p   ,       V   C   o   u   n   t   ,    
0047700    D   R   a   s   t   ;  \r   *       (   t   e   m   p   o   r
0047720    a   r   y   )       B   B   F   l   a   g   s   ,       D   s
0047740    t   X   .  \r  \r  \t   M   e   m   B   a   s   e   _       B
0047760    B   T   a   b   l   e   B   R   ;  \r  \t   T   _       (   F
0050000    e   t   c   h   _       B   B   .   s   r   c   B   p   l   )
0050020    -   1   ;  \r  \t   F   e   t   c   h   _       T   ,       S
0050040    R   a   s   t   _       M   D   ,       B   B   D   i   s   p
0050060    ,  \t   *       S   R   a   s   t   _       b   i   t   s    
0050100    p   e   r       l   i   n   e  \r  \t  \t   B   r   a   n   c
0050120    h   [   S   r   c   I   s   G   r   a   y   ,       R       e
0050140    v   e   n   ]   ;       *       B   r   a   n   c   h       i
0050160    f       s   o   u   r   c   e       b   i   t       m   a   p
0050200        i   s       g   r   a   y  \r  \r  \t   P   D   _       (
0050220    S   R   a   s   t   )       A   N   D       (   1   7   C   )
0050240  376 001  \0   A 204   ;  \t  \t   *       S   e   e       i   f
0050260        i   n   t   e   g   r   a   l       w   o   r   d   s    
0050300    p   e   r       l   i   n   e  \r  \t   T   _       S   t   a
0050320    c   k   ,       B   r   a   n   c   h   [   .   +   2   ,    
0050340    A   L   U   =   0   ]   ;  \r  \t   T   _       S   t   a   c
0050360    k   ,       R   e   s   c   h   e   d   u   l   e   ;  \t  \t
0050400    *       N   o   ,       p   r   o   c   e   s   s       o   n
0050420    l   y       o   n   e       s   c   a   n       l   i   n   e
0050440   \r  \t   Q   _       T   ,       B   r   a   n   c   h   [   S
0050460    r   c   M   u   l   t   ]   ;   *   #   #   #   ,       A   L
0050500    U   #   0   ]   ;  \t   *       B   r   a   n   c   h       i
0050520    f       r   e   s   u   m   i   n   g       f   r   o   m    
0050540    i   n   t   e   r   r   u   p   t  \r  \r  \t   S   r   c   X
0050560    _       M   D   ,       T   _       (   F   e   t   c   h   _
0050600        B   B   .   s   r   c   L   o   )   +   1   ;       *    
0050620    S   r   c   X   _       s   r   c   .   b   i   t  \r  \t   T
0050640    _       M   D   , 376 001  \0   o   @       F   e   t   c   h
0050660    _       T   ;  \t  \t   *       T   _       l   o   w       b
0050700    a   s   e       w   o   r   d       a   d   d   r   e   s   s
0050720   \r  \t   B   B   T   e   m   p   _       M   D   ,       B   r
0050740    a   n   c   h   [   S   r   c   S   e   t   u   p   B   R   ]
0050760    ;  \t   *       B   B   T   e   m   p   _       h   i   g   h
0051000        b   a   s   e       w   o   r   d       a   d   d   r   e
0051020    s   s  \r  \r   *       F   o   l   l   o   w   i   n   g    
0051040    g   a   r   b   a   g   e       i   s       o   n   l   y    
0051060    e   x   e   c   u   t   e   d       w   h   e   n       r   e
0051100    s   u   m   i   n   g       B   i   t   B   l   t       f   r
0051120    o   m       a   n       i   n   t   e   r   r   u   p   t  \r
0051140    *       o   r       f   a   u   l   t   .           W   e    
0051160    m   u   s   t       c   o   m   p   u   t   e       t   h   e
0051200        b   a   s   e       a   d   d   r   e   s   s       f   o
0051220    r       t   h   e       n   e   x   t       s   c   a   n    
0051240    l   i   n   e   .  \r   S   r   c   M 376 001  \0 377   $   u
0051260    l   t   :  \r  \t   S   r   c   X   _       M   D   ;  \r  \t
0051300    T   _       S   R   a   s   t   ,       C   a   l   l   [   M
0051320    u   l   S   u   b   ]   ;  \t  \t   *       T   ,   ,   Q    
0051340    _       Q   *   T   ,       c   l   o   b   b   e   r   s    
0051360    B   B   T   e   m   p  \r  \r   *       N   o   w       h   a
0051400    v   e       3   2   -   b   i   t       b   i   t       o   f
0051420    f   s   e   t       i   n       T   ,   ,   Q   .           A
0051440    d   d       i   t       t   o       b   i   t       m   a   p
0051460        b   a   s   e       a   d   d   r   e   s   s   .  \r  \t
0051500    F   e   t   c   h   _       B   B   .   s   r   c   L   o   ,
0051520        S   R   a   s   t   ,       B   r   a   n   c   h   [   .
0051540    +   2   ,       R   >   =   0   ]   ;       *       S   r   c
0051560    X   _       s   r   c   .   b   i   t  \r  \t   T   _       T
0051600    -   (   S   t   a   c   k   )   ;  \t  \t  \t   *       S   R
0051620    a   s   t       n   e   g   a   t   i   v   e   ,       a   d
0051640    j   u   s   t       h   i   g   h       r   e   s   u   l 376
0051660  001  \0 273   R   t  \r  \t  \t  \t  \t  \t   *       t   o    
0051700    m   a   k   e       i   t       3   2   -   b   i   t       2
0051720    '   s       c   o   m   p   l   e   m   e   n   t  \r  \t   S
0051740    r   c   X   _       (   S   r   c   X   )   +   Q   ;  \t  \t
0051760   \t   *       A   d   d       l   o   w       b   i   t       o
0052000    f   f   s   e   t       t   o       s   r   c   .   b   i   t
0052020   \r  \t   T   _       B   B   T   e   m   p   _       A   _    
0052040    T   ,       X   o   r   S   a   v   e   d   C   a   r   r   y
0052060    ;  \t   *       B   B   T   e   m   p   _       h   i   g   h
0052100        b   i   t       o   f   f   s   e   t  \r  \t   T   _    
0052120    R   C   Y   [   T   ,       S   r   c   X   ,       4   ]   ;
0052140   \t  \t   *       C   o   n   v   e   r   t       t   o       w
0052160    o   r   d       o   f   f   s   e   t  \r  \t   T   _       T
0052200    +   M   D   ;  \t  \t  \t   *       A   d   d       t   o    
0052220    l   o   w       b   a   s   e       w   o   r   d       a   d
0052240    d   r   e   s   s  \r  \t   S   r   c   X   _       (   S   r
0052260    c   X   )     376 001  \0 033   Q   A   N   D       (   1   7
0052300    C   )   ;  \t  \t   *       M   a   s   k       n   e   w    
0052320    B   i   t   A   d   d   r   e   s   s   .   b   i   t  \r  \t
0052340    F   e   t   c   h   _       B   B   .   s   r   c   H   i   ;
0052360   \r  \t   B   B   T   e   m   p   _       R   S   H   [   B   B
0052400    T   e   m   p   ,       4   ]   ;  \t  \t   *       B   B   T
0052420    e   m   p   _       h   i   g   h       w   o   r   d       o
0052440    f   f   s   e   t  \r  \t   B   B   T   e   m   p   _       (
0052460    B   B   T   e   m   p   )   +   M   D   ,       X   o   r   S
0052500    a   v   e   d   C   a   r   r   y   ;       *       A   d   d
0052520        t   o       h   i   g   h       b   a   s   e       w   o
0052540    r   d       a   d   d   r   e   s   s  \r  \r   *       T   o
0052560    g   e   t   h   e   r       a   g   a   i   n       h   e   r
0052600    e   .           N   o   w       B   B   T   e   m   p   ,   ,
0052620    T       =       a   d   j   u   s   t   e   d       b   a   s
0052640    e       v   a   l   u   e   .  \r   S   r   c   S   e   t   u
0052660    p   B   R   :  \r  \t   M   e   m 376 001  \0   R 263   B   a
0052700    s   e   _       B   B   S   r   c   B   R   ,       S   R   a
0052720    s   t   ,       B   r   a   n   c   h   [   .   +   3   ,    
0052740    R   >   =   0   ]   ;  \r  \r   *       P   r   o   c   e   s
0052760    s   i   n   g       b   o   t   t   o   m   -   t   o   -   t
0053000    o   p   .  \r   *       D   e   c   r   e   a   s   e       b
0053020    a   s   e       b   y       2   ^   1   5   ,       a   n   d
0053040        (   l   a   t   e   r   )       i   n   c   r   e   a   s
0053060    e       i   n   i   t   i   a   l       d   i   s   p   l   a
0053100    c   e   m   e   n   t       b   y       2   ^   1   5   .  \r
0053120   \t   T   _       T   -   (   1   0   0   0   0   0   C   )   ;
0053140   \r  \t   B   B   T   e   m   p   _       (   B   B   T   e   m
0053160    p   )   -   1   ,       X   o   r   S   a   v   e   d   C   a
0053200    r   r   y   ;  \r  \r   *       N   o   w       f   i   n   a
0053220    l   l   y       r   e   a   d   y       t   o       l   o   a
0053240    d       t   h   e       b   a   s   e       r   e   g   i   s
0053260    t   e   r   !  \r  \t   P   D   _       (   B   B   F 376 001
0053300   \0 270 236   l   a   g   s   )       A   N   D       (   O   r
0053320    [   B   B   F   .   d   i   s   j   o   i   n   t   !   ,    
0053340    B   B   F   .   d   i   s   j   o   i   n   t   I   t   e   m
0053360    s   !   ]   C   )   ;  \r  \t   B   R   L   o   _       T   ,
0053400        B   r   a   n   c   h   [   .   +   2   ,       A   L   U
0053420    #   0   ]   ;  \r  \t   B   B   D   i   s   p   _       (   B
0053440    B   D   i   s   p   )       A   N   D       (   N   o   t   [
0053460    N   o   T   o   u   c   h   F   l   g   ]   C   )   ;       *
0053500        N   o   t       d   i   s   j   o   i   n   t   ,       m
0053520    u   s   t       t   o   u   c   h  \r  \t   B   R   H   i   _
0053540        B   B   T   e   m   p   ,       B   r   a   n   c   h   [
0053560    B   B   S   e   t   u   p   X   ]   ;  \r  \f  \r   *   -   -
0053600    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0053660    -   -   -   -   -   -   -   -   -  \r   *       S   e   t    
0053700    u   p     376 001  \0 032 344   g   r   a   y       s   o   u
0053720    r   c   e       b   l   o   c   k  \r   *   -   -   -   -   -
0053740    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0054020    -   -   -   -   -   -  \r  \r   *       R   e   g   i   s   t
0054040    e   r   s       i   n       u   s   e   :       (   p   e   r
0054060    m   a   n   e   n   t   )       B   B   D   i   s   p   ,    
0054100    V   C   o   u   n   t   ,       D   R   a   s   t   ;  \r   *
0054120        (   t   e   m   p   o   r   a   r   y   )       D   s   t
0054140    X   .  \r  \r   *       R   e   -   i   n   t   e   r   p   r
0054160    e   t       s   r   c   B   p   l       a   s       a       G
0054200    r   a   y   P   a   r   m       r   e   c   o   r   d   .  \r
0054220    *       N   o   t   e   :       a   s   s   u   m   e       d
0054240    i   r   e   c   t   i   o   n       =       f   o   r   w   a
0054260    r   d       a   l   w   a   y   s       (   r   e   q   u   i
0054300    r   e   d       b   y       P 376 001  \0   =   @   r   i   n
0054320    c   O   p   s   )   .  \r   *       B   B   S   r   c   B   R
0054340        w   i   l   l       e   n   d       u   p       p   o   i
0054360    n   t   i   n   g       o   n   e       b   e   y   o   n   d
0054400        t   h   e       e   n   d       o   f       t   h   e    
0054420    g   r   a   y       b   r   i   c   k       M   O   D       2
0054440    ^   1   6   ,  \r   *       a   n   d       B   B   S   r   c
0054460        w   i   l   l       a   d   d   r   e   s   s       i   t
0054500        u   s   i   n   g       t   h   e       n   e   g   a   t
0054520    i   v   e       i   n   d   e   x   i   n   g       t   r   i
0054540    c   k   .  \r   S   r   c   I   s   G   r   a   y   :  \r  \t
0054560    S   r   c   X   _       M   D   ,       T   _       (   F   e
0054600    t   c   h   _       B   B   .   s   r   c   L   o   )   +   1
0054620    ;       *       S   r   c   X   _       s   r   c   .   b   i
0054640    t  \r  \t   B   B   T   e   m   p   _       M   D   ,       F
0054660    e   t   c   h   _       T   ;  \t  \t   *       B   B   T   e
0054700    m   p   _       l   o   w       b   a   s   e     376 001  \0
0054720  274 325   a   d   d   r   e   s   s  \r  \t   T   _       L   D
0054740    F   [   S   R   a   s   t   ,       4   ,       1   0   ]   ;
0054760   \t  \t   *       E   x   t   r   a   c   t       y   O   f   f
0055000    s   e   t  \r  \t   G   r   a   y   B   u   m   p   _       (
0055020    S   R   a   s   t   )       A   N   D       (   1   7   C   )
0055040    ;  \t   *       G   r   a   y   B   u   m   p   _       h   e
0055060    i   g   h   t   M   i   n   u   s   O   n   e       -   -  \r
0055100   \t  \t  \t  \t  \t   *       G   r   a   y   B   u   m   p    
0055120    a   n   d       S   R   a   s   t       a   r   e       s   a
0055140    m   e       r   e   g   i   s   t   e   r  \r  \t   T   _    
0055160    (   G   r   a   y   B   u   m   p   )   -   T   ;  \t  \t   *
0055200        T   _       h   e   i   g   h   t   M   i   n   u   s   O
0055220    n   e   -   y   O   f   f   s   e   t  \r  \t   B   B   T   e
0055240    m   p   _       (   B   B   T   e   m   p   )   +   T   +   1
0055260    ,       M   e   m   B   a   s   e   _       B   B   S   r   c
0055300    B   R   ;       *       E   n   d       o   f       b   r   i
0055320    c   k 376 001  \0 226 250       +   1  \r  \t   B   B   T   e
0055340    m   p   _       M   D   ,       B   R   L   o   _       B   B
0055360    T   e   m   p   ;  \t   *       L   o   a   d       u   p    
0055400    t   h   e       b   a   s   e       r   e   g   i   s   t   e
0055420    r  \r  \t   B   B   T   e   m   p   _       (   B   B   T   e
0055440    m   p   )   -   1   ,       X   o   r   S   a   v   e   d   C
0055460    a   r   r   y   ;       *       h   i   g   h       b   a   s
0055500    e   -   1       f   o   r       n   e   g   a   t   i   v   e
0055520        i   n   d   e   x   i   n   g  \r  \t   B   R   H   i   _
0055540        B   B   T   e   m   p   ;  \r  \t   P   D   _       S   t
0055560    a   c   k   ;  \t  \t  \t   *       R   e   s   u   m   i   n
0055600    g       f   r   o   m       i   n   t   e   r   r   u   p   t
0055620    ?  \r  \t   T   _       (   G   r   a   y   B   u   m   p   )
0055640    -   T   ,      \t  \t   *       R   e   c   o   v   e   r    
0055660    y   O   f   f   s   e   t  \r  \t  \t   B   r   a   n   c   h
0055700    [   N   o   G   r   a   y   D   i   v   ,       A   L   U   =
0055720    0   ]   ;       *       B 376 001  \0 307 336   r   a   n   c
0055740    h       i   f       n   o       d   i   v   i   s   i   o   n
0055760        r   e   q   u   i   r   e   d  \r  \r   *       F   o   l
0056000    l   o   w   i   n   g       g   a   r   b   a   g   e       i
0056020    s       o   n   l   y       e   x   e   c   u   t   e   d    
0056040    w   h   e   n       r   e   s   u   m   i   n   g       B   i
0056060    t   B   l   t       f   r   o   m       a   n       i   n   t
0056100    e   r   r   u   p   t  \r   *       o   r       f   a   u   l
0056120    t   .           W   e       m   u   s   t       c   o   m   p
0056140    u   t   e       t   h   e       g   r   a   y   I   n   d   e
0056160    x       f   o   r       t   h   e       n   e   x   t       s
0056200    c   a   n       l   i   n   e   .  \r   *       I   n       g
0056220    e   n   e   r   a   l       t   h   i   s       i   s       (
0056240    y   O   f   f   s   e   t       +       s   c   a   n   L   i
0056260    n   e   s   D   o   n   e   )       M   O   D       h   e   i
0056300    g   h   t   .           I       e   x   p   e   c   t       h
0056320    e   i   g   h   t  \r   *       u   s   u   a 376 001  \0   j
0056340    Y   l   l   y       t   o       b   e       a       p   o   w
0056360    e   r       o   f       t   w   o   ,       s   o       o   p
0056400    t   i   m   i   z   e       t   h   i   s       c   a   s   e
0056420        a   n   d       o   n   l   y       d   o       t   h   e
0056440   \r   *       f   u   l   l   -   b   l   o   w   n       M   O
0056460    D       o   p   e   r   a   t   i   o   n       w   h   e   n
0056500        n   e   c   e   s   s   a   r   y   .  \r  \t   T   _    
0056520    (   S   t   a   c   k   )   +   T   ;  \t  \t  \t   *       s
0056540    c   a   n   L   i   n   e   s   D   o   n   e       +       y
0056560    O   f   f   s   e   t  \r  \t   T   _       (   G   r   a   y
0056600    B   u   m   p   )   +   1   ,       Q   _       T   ;  \t  \t
0056620    *       T   _       h   e   i   g   h   t   ,       Q   _    
0056640    s   c   a   n   L   i   n   e   s   D   o   n   e   +   y   O
0056660    f   f   s   e   t  \r  \t   B   B   T   e   m   p   _       T
0056700    ;  \r  \t   P   D   _       (   G   r   a   y   B   u   m   p
0056720    )       A   N   D       T   ;  \t  \t   *       =       0    
0056740    i 376 001  \0 355 221   f   f       h   e   i   g   h   t    
0056760    i   s       p   o   w   e   r       o   f       2  \r  \t   T
0057000    _       (   G   r   a   y   B   u   m   p   )       A   N   D
0057020        Q   ,       B   r   a   n   c   h   [   .   +   2   ,    
0057040    A   L   U   =   0   ]   ;  \r   *       D   i   v   S   u   b
0057060        p   e   r   f   o   r   m   s       [   T   :       r   e
0057100    m   a   i   n   d   e   r   ,       Q   :       q   u   o   t
0057120    i   e   n   t   ]       _       (   T   ,   ,   Q   )   /   B
0057140    B   T   e   m   p  \r   *       a   n   d       c   l   o   b
0057160    b   e   r   s       B   B   C   t   r   l       -   -       b
0057200    e   w   a   r   e   !           T   h   e       d   i   v   i
0057220    s   i   o   n       c   a   n   n   o   t       f   a   i   l
0057240    .  \r  \t   T   _       A   0   ,       C   a   l   l   [   D
0057260    i   v   S   u   b   ]   ;  \r  \t   N   o   p   ;  \r  \r   *
0057300        T   o   g   e   t   h   e   r       a   g   a   i   n    
0057320    h   e   r   e   .           N   o   w       T       =       a
0057340    p   p   r   o   p   r 376 001  \0 324 254   i   a   t   e    
0057360    i   n   i   t   i   a   l       y       c   o   o   r   d   i
0057400    n   a   t   e   .  \r   N   o   G   r   a   y   D   i   v   :
0057420   \r  \t   I   B   B   S   r   c   _       T   -   (   G   r   a
0057440    y   B   u   m   p   )   -   1   ;  \t  \t   *       I   n   i
0057460    t       n   e   g   a   t   i   v   e       i   n   d   e   x
0057500        f   o   r       r   e   f   e   r   e   n   c   e   s  \r
0057520   \f  \r   *   -   -   -   -   -   -   -   -   -   -   -   -   -
0057540    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0057600    -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r   *
0057620        X   -   c   o   o   r   d   i   n   a   t   e       s   e
0057640    t   u   p   :       w   i   d   t   h   s   ,       m   a   r
0057660    g   i   n   s   ,       s   k   e   w   ,       m   a   s   k
0057700    s   ,       e   t   c   .  \r   *   -   -   -   -   -   -   -
0057720    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0057740    -   -   -   -   -   -   -   -   -   -   - 376 001  \0 364 255
0057760    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0060000    -   -   -   -   -   -   -   -   -  \r  \r   *       R   e   g
0060020    i   s   t   e   r   s       i   n       u   s   e   :       (
0060040    p   e   r   m   a   n   e   n   t   )       B   B   D   i   s
0060060    p   ,       V   C   o   u   n   t   ,       D   R   a   s   t
0060100    ,       S   R   a   s   t       (   =       G   r   a   y   B
0060120    u   m   p   )   ;  \r   *       (   t   e   m   p   o   r   a
0060140    r   y   )       D   s   t   X   ,       S   r   c   X       (
0060160    =       B   B   S   r   c   )   .  \r   B   B   S   e   t   u
0060200    p   X   :  \r  \t   M   e   m   B   a   s   e   _       B   B
0060220    T   a   b   l   e   B   R   ;  \r  \t   F   e   t   c   h   _
0060240        B   B   .   w   i   d   t   h   ;  \r  \t   W   i   d   t
0060260    h   _       M   D   ,       T   _       A   0   ;  \r  \r   *
0060300        C   o   m   p   u   t   e       L   M   a   s   k       a
0060320    n   d       R   M   a   s   k   .  \r   *       L   M   a   s
0060340    k       =       d   s   t   .   b   i   t   .  \r   *       R
0060360  376 001  \0 326 220   M   a   s   k       =       1   7   -   (
0060400    (   d   s   t   .   b   i   t   +   w   i   d   t   h   -   1
0060420    )       m   o   d       2   0   )       =       (   -   d   s
0060440    t   .   b   i   t   -   w   i   d   t   h   )       m   o   d
0060460        2   0   .  \r   *       F   o   r       r   e   f   e   r
0060500    e   n   c   e   ,       S   H   C       f   i   e   l   d   s
0060520        a   r   e   :  \r   *           B   2   :       S   H   A
0060540    =   T   ,       B   3   :       S   H   B   =   T   ,       B
0060560    4   -   7   :       c   o   u   n   t   ,       B   8   -   1
0060600    1   :       R   M   a   s   k   ,       B   1   2   -   1   5
0060620    :       L   M   a   s   k  \r  \t   T   _       T   -   (   W
0060640    i   d   t   h   )   ;  \t  \t  \t   *       T   _       -   w
0060660    i   d   t   h  \r  \t   T   _       T   -   (   D   s   t   X
0060700    )   ,  \t  \t  \t   *       T   _       -   d   s   t   .   b
0060720    i   t   -   w   i   d   t   h  \r  \t  \t   B   r   a   n   c
0060740    h   [   B   i   t   B   l   t   D   o   n   e   2   ,       A
0060760    L   U   >   =   0 376 001  \0 233   S   ]   ;       *       S
0061000    t   o   p       h   e   r   e       i   f       w   i   d   t
0061020    h       <   =       0  \r  \t   T   _       D   P   F   [   T
0061040    ,       4   ,       4   ]   ;  \t  \t   *       B   8   -   1
0061060    1   _   (   (   -   d   s   t   .   b   i   t   -   w   i   d
0061100    t   h   )   m   o   d       2   0   )       l   s   h       4
0061120   \r  \t   B   B   M   a   s   k   s   _       T       O   R    
0061140    (   D   s   t   X   )   ;  \t  \t   *       B   1   2   -   1
0061160    5   _       d   s   t   .   b   i   t  \r  \r   *       C   o
0061200    m   p   u   t   e       d   e   s   t   i   n   a   t   i   o
0061220    n       w   i   d   t   h       i   n       w   o   r   d   s
0061240    ,       i   n   c   l   u   d   i   n   g       f   i   r   s
0061260    t       a   n   d       l   a   s   t       p   a   r   t   i
0061300    a   l       w   o   r   d   s   .  \r   *       D   W   i   d
0061320    t   h   _       (   w   i   d   t   h       +       d   s   t
0061340    .   b   i   t       +   1   7   )       /       2   0   .  \r
0061360   \t   T   _       (   W   i   d   t   h 376 001  \0   (   e   )
0061400    +   (   1   7   C   )   ;  \r  \t   T   _       T   +   (   Q
0061420    _       D   s   t   X   )   ;  \r  \t   D   W   i   d   t   h
0061440    _       R   S   H   [   T   ,       4   ]   ;  \r  \r  \t   B
0061460    B   C   t   r   l   _       (   B   B   D   i   s   p   )   -
0061500    (   B   B   D   i   s   p   )   -   1   ,  \t   *       B   B
0061520    C   t   r   l   [   0   ]       _       1       i   n       c
0061540    a   s   e       g   r   a   y       s   o   u   r   c   e  \r
0061560   \t  \t   B   r   a   n   c   h   [   B   B   N   o   S   e   t
0061600    u   p   S   r   c   X   ,       R       e   v   e   n   ]   ;
0061620        *       B   r   a   n   c   h       i   f       g   r   a
0061640    y  \r  \r   *       C   o   m   p   u   t   e       s   o   u
0061660    r   c   e       w   i   d   t   h       i   n       w   o   r
0061700    d   s   ,       i   n   c   l   u   d   i   n   g       f   i
0061720    r   s   t       a   n   d       l   a   s   t       p   a   r
0061740    t   i   a   l       w   o   r   d   s   .  \r   *       S   W
0061760    i   d   t   h   _       (   w   i   d   t   h       +     376
0062000  001  \0 030  \b   s   r   c   .   b   i   t       +   1   7   )
0062020        /       2   0   .  \r  \t   T   _       (   S   r   c   X
0062040    )   +   (   1   7   C   )   ;  \r  \t   T   _       (   W   i
0062060    d   t   h   )   +   T   ;  \r  \t   S   W   i   d   t   h   _
0062100        T   _       R   S   H   [   T   ,       4   ]   ;  \r  \r
0062120    *       S   e   t       f   l   a   g   s       t   o       c
0062140    o   n   t   r   o   l       f   e   t   c   h   i   n   g    
0062160    o   f       "   e   x   t   r   a   "       f   i   r   s   t
0062200        a   n   d       l   a   s   t       w   o   r   d   s   .
0062220   \r   *       E   x   c   e   p   t       i   n       t   h   e
0062240        "   t   h   i   n   "       c   a   s   e       (   D   W
0062260    i   d   t   h   =   1   )   ,       t   h   e       s   e   t
0062300    u   p   /   f   i   n   i   s   h       r   o   u   t   i   n
0062320    e   s       f   o   r       t   h   e  \r   *       h   o   r
0062340    i   z   o   n   t   a   l       l   o   o   p   s       n   o
0062360    m   i   n   a   l   l   y       f   e   t   c   h       1    
0062400    w   o   r   d 376 001  \0 312   g       a   n   d       s   t
0062420    o   r   e       2       w   o   r   d   s   ;       a   n    
0062440    e   x   t   r   a       f   e   t   c   h  \r   *       m   a
0062460    y       b   e       r   e   q   u   i   r   e   d       a   t
0062500        t   h   e       b   e   g   i   n   n   i   n   g   ,    
0062520    t   h   e       e   n   d   ,       o   r       b   o   t   h
0062540    ,       d   e   p   e   n   d   i   n   g       o   n       t
0062560    h   e       n   u   m   b   e   r  \r   *       o   f       w
0062600    o   r   d   s       i   n       t   h   e       s   o   u   r
0062620    c   e       a   n   d       d   e   s   t   i   n   a   t   i
0062640    o   n       i   t   e   m   s       (   s   e   e       i   n
0062660    t   r   o   d   u   c   t   o   r   y       c   o   m   m   e
0062700    n   t   s   )   .  \r   *       D   W   i   d   t   h       a
0062720    n   d       S   W   i   d   t   h       d   i   f   f   e   r
0062740        b   y       a   t       m   o   s   t       +   /   -   1
0062760    .  \r   *       I   f       S   W   i   d   t   h       =    
0063000    D   W   i   d   t   h   +   1   , 376 001  \0   q   y       a
0063020    n       e   x   t   r   a       s   o   u   r   c   e       w
0063040    o   r   d       m   u   s   t       b   e       f   e   t   c
0063060    h   e   d       a   t       b   o   t   h       e   n   d   s
0063100    .  \r   *       I   f       S   W   i   d   t   h       =    
0063120    D   W   i   d   t   h   -   1       o   r       S   W   i   d
0063140    t   h       =       1   ,       n   o       e   x   t   r   a
0063160        s   o   u   r   c   e       w   o   r   d   s       n   e
0063200    e   d       b   e       f   e   t   c   h   e   d   .  \r   *
0063220        I   f       S   W   i   d   t   h       =       D   W   i
0063240    d   t   h       #       1   ,       a   n       e   x   t   r
0063260    a       s   o   u   r   c   e       w   o   r   d       m   u
0063300    s   t       b   e       f   e   t   c   h   e   d       a   t
0063320        o   n   e       e   n   d   :  \r   *               i   f
0063340        s   r   c   .   b   i   t       m   o   d       2   0    
0063360    >       d   s   t   .   b   i   t       m   o   d       2   0
0063400        t   h   e   n       l   e   f   t       e   l   s 376 001
0063420   \0   *   j   e       r   i   g   h   t   .  \r   *       S   e
0063440    t       B   B   C   t   r   l   [   0   ]   _       e   x   t
0063460    r   a   L   e   f   t   ,       B   B   C   t   r   l   [   1
0063500    :   1   5   ]   _       e   x   t   r   a   R   i   g   h   t
0063520    .  \r   *       (   t   h   e   s   e       f   l   a   g   s
0063540        a   r   e       e   x   c   h   a   n   g   e   d       l
0063560    a   t   e   r       i   f       w   o   r   k   i   n   g    
0063600    r   i   g   h   t   -   t   o   -   l   e   f   t   .   )  \r
0063620    *       T       s   t   i   l   l       h   a   s       S   W
0063640    i   d   t   h   ;       Q       s   t   i   l   l       h   a
0063660    s       d   s   t   .   b   i   t   .  \r   *       T   h   e
0063700        f   o   l   l   o   w   i   n   g       2       i   n   s
0063720    t   r   u   c   t   i   o   n   s       s   e   t       B   B
0063740    C   t   r   l   _       -   1       i   f       S   W   i   d
0063760    t   h   >   D   W   i   d   t   h   ,       0       o   t   h
0064000    e   r   w   i   s   e   .  \r  \t   P   D   _       (   D   W
0064020    i   d   t 376 001  \0   M   W   h   )   -   T   ;  \r  \t   B
0064040    B   C   t   r   l   _       T   -   T   -   1   ,       X   o
0064060    r   S   a   v   e   d   C   a   r   r   y   ,       B   r   a
0064100    n   c   h   [   S   e   t   u   p   S   k   e   w   ,       A
0064120    L   U   #   0   ]   ;  \r  \r   *       S   e   t       B   B
0064140    C   t   r   l   _       1   0   0   0   0   0       i   f    
0064160    s   r   c   .   b   i   t       >       d   s   t   .   b   i
0064200    t   ,       7   7   7   7   7       o   t   h   e   r   w   i
0064220    s   e   .  \r  \t   P   D   _       (   S   r   c   X   )   -
0064240    Q   -   1   ;  \t  \t  \t   *       Q   =   D   s   t   X   ;
0064260        c   a   r   r   y       i   f   f       s   r   c   .   b
0064300    i   t       >       d   s   t   .   b   i   t  \r  \t   B   B
0064320    C   t   r   l   _       1   0   0   0   0   0   C   ;  \r  \t
0064340    B   B   C   t   r   l   _       (   B   B   C   t   r   l   )
0064360    -   1   ,       X   o   r   S   a   v   e   d   C   a   r   r
0064400    y   ,       B   r   a   n   c   h   [   S   e   t   u   p   S
0064420    k   e   w   ]   ;  \r  \r   B 376 001  \0   ] 264   B   N   o
0064440    S   e   t   u   p   S   r   c   X   :  \r  \t   N   o   p   ;
0064460   \r  \f  \r   *       X   -   c   o   o   r   d   i   n   a   t
0064500    e       s   e   t   u   p       (   c   o   n   t   '   d   )
0064520   \r  \r   *       C   o   m   p   u   t   e       s   k   e   w
0064540        =       (   s   r   c   .   b   i   t   -   d   s   t   .
0064560    b   i   t   )       m   o   d       2   0   ,       a   n   d
0064600        d   e   t   e   r   m   i   n   e       h   o   r   i   z
0064620    o   n   t   a   l       d   i   r   e   c   t   i   o   n   .
0064640   \r   *       S   t   i   l   l       h   a   v   e       Q    
0064660    =       d   s   t   .   b   i   t   .  \r   S   e   t   u   p
0064700    S   k   e   w   :  \r  \t   T   _       (   S   r   c   X   )
0064720    -   Q   ;  \r  \t   P   D   _       B   B   D   i   s   p   ,
0064740        B   r   a   n   c   h   [   .   +   2   ,       R       e
0064760    v   e   n   ]   ;  \r  \t   S   k   e   w   _       T       A
0065000    N   D       (   1   7   C   )   ,       D   b   l   B   r   a
0065020    n   c   h   [   S   e   t   u   p   R   t   o   L 376 001  \0
0065040  206 032   ,       S   e   t   u   p   L   t   o   R   ,       A
0065060    L   U   <   0   ]   ;  \r  \r  \t   B   B   S   r   c   _    
0065100    I   B   B   S   r   c   ;  \t  \t  \t   *       G   r   a   y
0065120    ,       i   n   i   t       s   o   u   r   c   e       p   t
0065140    r  \r  \t   S   k   e   w   _       T       A   N   D       (
0065160    1   7   C   )   ;  \r  \t   T   _       2   0   0   C   ,    
0065200    B   r   a   n   c   h   [   N   o   S   r   c   T   h   i   n
0065220    C   h   k   ]   ;  \t   *       A   L   U   F   M       c   o
0065240    n   t   r   o   l       f   o   r       "   A   +   1   "  \r
0065260   \r   *       d   i   r   e   c   t   i   o   n       =       f
0065300    o   r   w   a   r   d   :       w   o   r   k       f   r   o
0065320    m       l   e   f   t       t   o       r   i   g   h   t   .
0065340   \r   *       S   e   t       S   H   A   =   R   ,       S   H
0065360    B   =   T   ,       A   L   U   F   [   1   5   ]   =   "   A
0065400    +   1   "   .  \r   *       N   o   t   e   :       i   f    
0065420    s   k   e   w       =       0   ,       s   e   t       S   H
0065440    A   = 376 001  \0 310   ]   R   ,       S   H   B   =   R   .
0065460   \r   S   e   t   u   p   L   t   o   R   :  \r  \t   T   _    
0065500    2   0   0   C   ,       B   r   a   n   c   h   [   N   o   S
0065520    r   c   T   h   i   n   C   h   k   ,       A   L   U   =   0
0065540    ]   ;       *       A   L   U   F   M       c   o   n   t   r
0065560    o   l       f   o   r       "   A   +   1   "  \r  \t   S   k
0065600    e   w   _       (   S   k   e   w   )       O   R       (   2
0065620    0   C   )   ,       B   r   a   n   c   h   [   S   e   t   u
0065640    p   A   L   U   &   S   h   C   ]   ;       *       S   H   B
0065660    =   T  \r  \r   *       d   i   r   e   c   t   i   o   n    
0065700    =       b   a   c   k   w   a   r   d   :       w   o   r   k
0065720        f   r   o   m       r   i   g   h   t       t   o       l
0065740    e   f   t   .  \r   *       S   e   t       S   H   A   =   T
0065760    ,       S   H   B   =   R   ,       A   L   U   F   [   1   5
0066000    ]   =   "   A   -   1   "   .  \r   *       A   d   v   a   n
0066020    c   e       s   t   a   r   t   i   n   g       X       c   o
0066040    o   r   d   i   n   a   t 376 001  \0  \n 310   e   s       t
0066060    o       r   i   g   h   t   m   o   s   t       e   n   d   s
0066100        o   f       i   t   e   m   s   .  \r   *       N   o   t
0066120    e   :       i   f       s   k   e   w       =       0   ,    
0066140    s   e   t       S   H   A   =   R   ,       S   H   B   =   R
0066160    ,       a   n   d       d   o       n   o   t       e   x   c
0066200    h   a   n   g   e       e   x   t   r   a   -   w   o   r   d
0066220        f   l   a   g   s   .  \r   S   e   t   u   p   R   t   o
0066240    L   :  \r  \t   B   B   D   i   s   p   _       (   B   B   D
0066260    i   s   p   )       O   R       (   1   0   0   0   0   0   C
0066300    )   ,       B   r   a   n   c   h   [   .   +   3   ,       A
0066320    L   U   =   0   ]   ;  \r  \t   S   k   e   w   _       (   S
0066340    k   e   w   )       O   R       (   4   0   C   )   ;  \t  \t
0066360    *       S   H   A   =   T  \r  \t   B   B   C   t   r   l   _
0066400        (   B   B   C   t   r   l   )       L   C   Y       1   ;
0066420   \t  \t   *       E   x   c   h   a   n   g   e       s   o   u
0066440    r   c   e       e   x   t   r   a   -   w   o 376 001  \0 364
0066460  032   r   d       f   l   a   g   s  \r  \t   T   _       (   W
0066500    i   d   t   h   )   -   1   ;  \r  \t   D   s   t   X   _    
0066520    (   D   s   t   X   )   +   T   ;  \t  \t  \t   *       A   d
0066540    v   a   n   c   e       t   o       r   i   g   h   t   m   o
0066560    s   t       X   -   c   o   o   r   d   i   n   a   t   e   s
0066600   \r  \t   S   r   c   X   _       (   S   r   c   X   )   +   T
0066620    ;  \t  \t  \t   *       A   d   v   a   n   c   e       n   o
0066640    n   -   g   r   a   y       s   o   u   r   c   e  \r  \t   T
0066660    _       3   6   C   ;  \t  \t  \t  \t   *       A   L   U   F
0066700    M       c   o   n   t   r   o   l       f   o   r       "   A
0066720    -   1   "  \r  \r   *       H   a   v   e       A   L   U   F
0066740    M       c   o   n   t   r   o   l       i   n       T       f
0066760    o   r       "   A   +   /   -   1   "       o   p   e   r   a
0067000    t   i   o   n   .  \r   S   e   t   u   p   A   L   U   &   S
0067020    h   C   :  \r  \t   P   D   _       (   S   W   i   d   t   h
0067040    )   -   1   ;  \t  \t  \t   *       T   h   i   n       s   o
0067060    u 376 001  \0 310   #   r   c   e       c   h   e   c   k    
0067100    (   s   e   e       b   e   l   o   w   )  \r   N   o   S   r
0067120    c   T   h   i   n   C   h   k   :  \r  \t   A   L   U   F   M
0067140    R   W   _       T   ,       A   +   /   -   1   ,  \t  \t   *
0067160        S   e   t       A   L   U       f   u   n   c   t   i   o
0067200    n  \r  \t  \t   B   r   a   n   c   h   [   S   e   t   u   p
0067220    S   h   C   ,       A   L   U   #   0   ]   ;       *      \r
0067240   \r   *       I   f       w   e       w   o   u   l   d       h
0067260    a   v   e       f   e   t   c   h   e   d       a   n       e
0067300    x   t   r   a       s   o   u   r   c   e       w   o   r   d
0067320    ,       b   u   t       t   h   e   r   e       i   s       o
0067340    n   l   y       o   n   e       s   o   u   r   c   e  \r   *
0067360        w   o   r   d       t   o       f   e   t   c   h   ,    
0067400    t   h   e   n       r   e   s   e   t       s   o   u   r   c
0067420    e       e   x   t   r   a   -   w   o   r   d       f   l   a
0067440    g   s       a   n   d       s   e   t       S   H   A   =   R
0067460    ,       S   H   B   = 376 001  \0   ,   R   R   .  \r  \t   B
0067500    B   C   t   r   l   _       A   0   ,       B   r   a   n   c
0067520    h   [   .   +   2   ,       R   >   =   0   ]   ;  \r  \t   S
0067540    k   e   w   _       (   S   k   e   w   )       A   N   D    
0067560    (   1   7   C   )   ;  \r  \t   T   _       L   S   H   [   B
0067600    B   M   a   s   k   s   ,       1   0   ]   ,       B   r   a
0067620    n   c   h   [   .   +   2   ]   ;       *       P   l   a   c
0067640    e   m   e   n   t  \r  \r   *       M   e   r   g   e       s
0067660    k   e   w       w   i   t   h       m   a   s   k   s       a
0067700    n   d       l   o   a   d       S   H   C   .  \r   S   e   t
0067720    u   p   S   h   C   :  \r  \t   T   _       L   S   H   [   B
0067740    B   M   a   s   k   s   ,       1   0   ]   ;  \t  \t   *    
0067760    S   h   i   f   t       m   a   s   k   s       t   o       B
0070000    0   -   7  \r  \t   T   _       L   C   Y   [   T   ,       S
0070020    k   e   w   ,       1   0   ]   ;  \t  \t   *       C   o   n
0070040    c   a   t   e   n   a   t   e       S   H   A   ,       S   H
0070060    B   ,       c   o   u   n   t   ,       m 376 001  \0 217 302
0070100    a   s   k   s  \r  \t   T   _       D   W   i   d   t   h   ,
0070120        S   h   C   _       T   ;  \r  \f  \r   *   -   -   -   -
0070140    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0070220    -   -   -   -   -   -   -  \r   *       C   o   m   p   u   t
0070240    e       w   o   r   d       a   d   d   r   e   s   s   e   s
0070260        a   n   d       i   n   c   r   e   m   e   n   t   s  \r
0070300    *   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0070320    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0070360    -   -   -   -   -   -   -   -   -   -   -   -  \r  \r   *    
0070400    R   e   g   i   s   t   e   r   s       i   n       u   s   e
0070420    :       (   p   e   r   m   a   n   e   n   t   )       B   B
0070440    D   i   s   p   ,       V   C   o   u   n   t   ,       D   R
0070460    a   s   t   ,       S   R   a   s   t   ,       W   i   d   t
0070500  376 001  \0 265   1   h   ,       B   B   C   t   r   l   ;  \r
0070520    *       (   t   e   m   p   o   r   a   r   y   )       D   s
0070540    t   X   ,       S   r   c   X   ,       D   W   i   d   t   h
0070560    ,       S   W   i   d   t   h   .  \r   *       N   o   t   e
0070600    :       a   t       t   h   i   s       p   o   i   n   t    
0070620    D   R   a   s   t       a   n   d       S   R   a   s   t    
0070640    a   r   e       s   t   i   l   l       i   n       u   n   i
0070660    t   s       o   f       b   i   t   s   .  \r  \r   *       C
0070700    o   n   v   e   r   t       D   s   t   X       t   o       X
0070720        w   o   r   d       d   i   s   p   l   a   c   e   m   e
0070740    n   t       r   e   l   a   t   i   v   e       t   o       l
0070760    e   f   t   m   o   s   t       w   o   r   d       o   f  \r
0071000    *       f   i   r   s   t       s   c   a   n       l   i   n
0071020    e   .           N   o   t   e   :       B   B   D   s   t    
0071040    i   s       t   h   e       s   a   m   e       r   e   g   i
0071060    s   t   e   r       a   s       D   s   t   X   .  \r  \t   B
0071100    B   D   s   t   _ 376 001  \0 020 264       R   S   H   [   D
0071120    s   t   X   ,       4   ]   ;  \t  \t   *       B   B   D   s
0071140    t   _       D   s   t   X   /   2   0  \r  \r   *       C   o
0071160    m   p   u   t   e       d   e   s   t   i   n   a   t   i   o
0071200    n       i   n   t   e   r   -   s   c   a   n   -   l   i   n
0071220    e       w   o   r   d       a   d   d   r   e   s   s       i
0071240    n   c   r   e   m   e   n   t   .  \r   *       D   s   t   I
0071260    n   c   _       D   R   a   s   t       +       (   i   f    
0071300    d   i   r   e   c   t   i   o   n   =   f   o   r   w   a   r
0071320    d       t   h   e   n       -   D   W   i   d   t   h       e
0071340    l   s   e       D   W   i   d   t   h   )   .  \r   *       A
0071360    l   s   o       c   o   m   p   u   t   e       f   i   r   s
0071400    t       P   r   e   F   e   t   c   h       o   f   f   s   e
0071420    t       (   f   r   o   m       B   B   D   s   t   )   .  \r
0071440    *       =       l   e   f   t   m   o   s   t       w   o   r
0071460    d       o   n       n   e   x   t       s   c   a   n       l
0071500    i   n   e   ,       e   v   e   n     376 001  \0 376 364   i
0071520    f       p   r   o   c   e   s   s   i   n   g       r   i   g
0071540    h   t   -   t   o   -   l   e   f   t   .  \r   *       D   P
0071560    r   e   f   O   f   f   s   e   t   _       i   f       d   i
0071600    r   e   c   t   i   o   n   =   f   o   r   w   a   r   d    
0071620    t   h   e   n       D   R   a   s   t       e   l   s   e    
0071640    D   R   a   s   t   -   D   W   i   d   t   h   .  \r   *    
0071660    F   i   n   a   l   l   y   ,       i   f       d   i   r   e
0071700    c   t   i   o   n   =   b   a   c   k   w   a   r   d       t
0071720    h   e   n       a   d   d       2   ^   1   5       t   o    
0071740    t   h   e       w   o   r   d       a   d   d   r   e   s   s
0071760    ,  \r   *       w   h   i   c   h       w   i   l   l       b
0072000    e       c   o   u   n   t   e   d       d   o   w   n       t
0072020    o   w   a   r   d       t   h   e       b   a   s   e       r
0072040    e   g   i   s   t   e   r       w   h   i   c   h       w   a
0072060    s       i   n   i   t   i   a   l   i   z   e   d  \r   *    
0072100    t   o       t   h   e       l   e   f   t   m   o   s   t 376
0072120  001  \0   _  \v       w   o   r   d       o   f       t   h   e
0072140        f   i   r   s   t       s   c   a   n       l   i   n   e
0072160        -   2   ^   1   5   .  \r   *       N   o   t   e   :    
0072200    T       =       D   W   i   d   t   h       h   e   r   e   .
0072220   \r  \t   D   R   a   s   t   _       R   S   H   [   D   R   a
0072240    s   t   ,       4   ]   ,  \t  \t   *       C   o   n   v   e
0072260    r   t       D   R   a   s   t       t   o       w   o   r   d
0072300    s  \r  \t  \t   B   r   a   n   c   h   [   D   s   t   I   n
0072320    c   R   t   o   L   ,       R   <   0   ]   ;       *       B
0072340    r   a   n   c   h       i   f       d   i   r   e   c   t   i
0072360    o   n   =   b   a   c   k   w   a   r   d  \r  \r   D   s   t
0072400    I   n   c   L   t   o   R   :  \r  \t   D   s   t   I   n   c
0072420    _       (   D   R   a   s   t   )   -   T   ;  \t  \t   *    
0072440    L       t   o       R   :       D   R   a   s   t   -   D   W
0072460    i   d   t   h  \r  \t   D   P   r   e   f   O   f   f   s   e
0072500    t   _       T   _       D   R   a   s   t   ,       B   r   a
0072520    n   c   h   [ 376 001  \0   [ 252   D   s   t   I   n   c   D
0072540    o   n   e   ]   ;  \r  \r   D   s   t   I   n   c   R   t   o
0072560    L   :  \r  \t   D   R   a   s   t   _       (   D   R   a   s
0072600    t   )       O   R       (   1   7   0   0   0   0   C   )   ;
0072620   \t   *       E   x   t   e   n   d       s   i   g   n  \r  \t
0072640    D   s   t   I   n   c   _       (   D   R   a   s   t   )   +
0072660    T   ;  \t  \t   *       R       t   o       L   :       D   R
0072700    a   s   t   +   D   W   i   d   t   h  \r  \t   D   P   r   e
0072720    f   O   f   f   s   e   t   _       T   _       (   D   R   a
0072740    s   t   )   -   T   ;  \r  \t   B   B   D   s   t   _       (
0072760    B   B   D   s   t   )   +   (   1   0   0   0   0   0   C   )
0073000    ;  \r  \r   D   s   t   I   n   c   D   o   n   e   :  \r  \t
0073020    P   r   e   f   D   s   t   _       (   B   B   D   s   t   )
0073040    +   T   ;  \t  \t   *       I   n   i   t   i   a   l       P
0073060    r   e   F   e   t   c   h       a   d   d   r   e   s   s  \r
0073100   \r   *       I   s       a       s   o   u   r   c   e       i
0073120    t   e   m       r   e   q   u   i 376 001  \0 264   R   r   e
0073140    d   ?           I   f       n   o   t   ,       s   k   i   p
0073160        s   o   u   r   c   e       s   e   t   u   p   .  \r  \t
0073200    B   B   D   i   s   p   ,       B   r   a   n   c   h   [   B
0073220    B   N   o   S   o   u   r   c   e   ,       R       e   v   e
0073240    n   ]   ;  \r  \r   *       C   o   n   v   e   r   t       S
0073260    r   c   X       t   o       X       w   o   r   d       d   i
0073300    s   p   l   a   c   e   m   e   n   t       r   e   l   a   t
0073320    i   v   e       t   o       l   e   f   t   m   o   s   t    
0073340    w   o   r   d       o   f  \r   *       f   i   r   s   t    
0073360    s   c   a   n       l   i   n   e   .           N   o   t   e
0073400    :       B   B   S   r   c       i   s       t   h   e       s
0073420    a   m   e       r   e   g   i   s   t   e   r       a   s    
0073440    S   r   c   X   .  \r  \t   B   B   S   r   c   _       R   S
0073460    H   [   S   r   c   X   ,       4   ]   ;  \t  \t   *       B
0073500    B   S   r   c   _       S   r   c   X   /   2   0  \r  \r   *
0073520        C   o   m   p   u   t   e       s   o   u   r   c 376 001
0073540   \0 225 211   e       i   n   t   e   r   -   s   c   a   n   -
0073560    l   i   n   e       w   o   r   d       a   d   d   r   e   s
0073600    s       i   n   c   r   e   m   e   n   t   .  \r   *       S
0073620    r   c   I   n   c   _       S   R   a   s   t       +       (
0073640    i   f       d   i   r   e   c   t   i   o   n   =   f   o   r
0073660    w   a   r   d       t   h   e   n       -   S   W   i   d   t
0073700    h       e   l   s   e       S   W   i   d   t   h   )   .  \r
0073720    *       A   l   s   o       c   o   m   p   u   t   e       f
0073740    i   r   s   t       P   r   e   F   e   t   c   h       o   f
0073760    f   s   e   t       (   f   r   o   m       B   B   S   r   c
0074000    )   .  \r   *       =       l   e   f   t   m   o   s   t    
0074020    w   o   r   d       o   n       n   e   x   t       s   c   a
0074040    n       l   i   n   e   ,       e   v   e   n       i   f    
0074060    p   r   o   c   e   s   s   i   n   g       r   i   g   h   t
0074100    -   t   o   -   l   e   f   t   .  \r   *       S   P   r   e
0074120    f   O   f   f   s   e   t   _       i   f       d   i   r   e
0074140    c   t   i 376 001  \0 202   .   o   n   =   f   o   r   w   a
0074160    r   d       t   h   e   n       S   R   a   s   t       e   l
0074200    s   e       S   R   a   s   t   -   S   W   i   d   t   h   .
0074220   \r   *       F   i   n   a   l   l   y   ,       i   f       d
0074240    i   r   e   c   t   i   o   n   =   b   a   c   k   w   a   r
0074260    d       t   h   e   n       a   d   d       2   ^   1   5    
0074300    t   o       t   h   e       w   o   r   d       a   d   d   r
0074320    e   s   s   ,  \r   *       w   h   i   c   h       w   i   l
0074340    l       b   e       c   o   u   n   t   e   d       d   o   w
0074360    n       t   o   w   a   r   d       t   h   e       b   a   s
0074400    e       r   e   g   i   s   t   e   r       w   h   i   c   h
0074420        w   a   s       i   n   i   t   i   a   l   i   z   e   d
0074440   \r   *       t   o       t   h   e       l   e   f   t   m   o
0074460    s   t       w   o   r   d       o   f       t   h   e       f
0074500    i   r   s   t       s   c   a   n       l   i   n   e       -
0074520    2   ^   1   5   .  \r  \t   T   _       S   W   i   d   t   h
0074540    ;  \r  \t   S   R   a   s   t 376 001  \0 270 036   _       R
0074560    S   H   [   S   R   a   s   t   ,       4   ]   ,  \t  \t   *
0074600        C   o   n   v   e   r   t       S   R   a   s   t       t
0074620    o       w   o   r   d   s  \r  \t  \t   B   r   a   n   c   h
0074640    [   S   r   c   I   n   c   R   t   o   L   ,       R   <   0
0074660    ]   ;       *       B   r   a   n   c   h       i   f       d
0074700    i   r   e   c   t   i   o   n   =   b   a   c   k   w   a   r
0074720    d  \r  \r   S   r   c   I   n   c   L   t   o   R   :  \r  \t
0074740    S   r   c   I   n   c   _       (   S   R   a   s   t   )   -
0074760    T   ;  \t  \t   *       L       t   o       R   :       S   R
0075000    a   s   t   -   S   W   i   d   t   h  \r  \t   S   P   r   e
0075020    f   O   f   f   s   e   t   _       T   _       S   R   a   s
0075040    t   ,       B   r   a   n   c   h   [   S   r   c   I   n   c
0075060    D   o   n   e   ]   ;  \r  \r   S   r   c   I   n   c   R   t
0075100    o   L   :  \r  \t   S   R   a   s   t   _       (   S   R   a
0075120    s   t   )       O   R       (   1   7   0   0   0   0   C   )
0075140    ;  \t   *       E   x   t   e   n   d       s   i 376 001  \0
0075160  302 224   g   n  \r  \t   S   r   c   I   n   c   _       (   S
0075200    R   a   s   t   )   +   T   ;  \t  \t   *       R       t   o
0075220        L   :       S   R   a   s   t   +   S   W   i   d   t   h
0075240   \r  \t   S   P   r   e   f   O   f   f   s   e   t   _       T
0075260    _       (   S   R   a   s   t   )   -   T   ;  \r  \t   B   B
0075300    S   r   c   _       (   B   B   S   r   c   )   +   (   1   0
0075320    0   0   0   0   C   )   ;  \r  \r   S   r   c   I   n   c   D
0075340    o   n   e   :  \r  \t   P   r   e   f   S   r   c   _       (
0075360    B   B   S   r   c   )   +   T   ;  \t  \t   *       I   n   i
0075400    t   i   a   l       P   r   e   F   e   t   c   h       a   d
0075420    d   r   e   s   s  \r  \f  \r   *   -   -   -   -   -   -   -
0075440    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0075520    -   -   -   -  \r   *       F   i   n   a   l       a   d   j
0075540    u   s   t   m   e   n   t   s       p   r   i   o   r       t
0075560    o     376 001  \0 232 201   e   n   t   e   r   i   n   g    
0075600    v   e   r   t   i   c   a   l       l   o   o   p  \r   *   -
0075620    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0075700    -   -   -   -   -   -   -   -   -   -  \r  \r   *       C   o
0075720    m   p   u   t   e       I   C   n   t   ,       t   h   e    
0075740    i   n   i   t   i   a   l       v   a   l   u   e       o   f
0075760        t   h   e       C   n   t       r   e   g   i   s   t   e
0076000    r       f   o   r       e   a   c   h       l   o   o   p   .
0076020   \r   *       I   C   n   t   _       i   f       D   W   i   d
0076040    t   h       <   =       2   2   B       t   h   e   n       D
0076060    W   i   d   t   h   -   1       e   l   s   e       N   O   T
0076100        (   D   W   i   d   t   h   -   3   )       [   =       2
0076120    -   D   W   i   d   t   h   ]   .  \r   B   B   N   o   S   o
0076140    u   r   c   e   :  \r  \t   P   D   _       (   D   W   i   d
0076160    t   h   )   -   (   2   3 376 001  \0 322   v   C   )   ;  \r
0076200   \t   I   C   n   t   _       T   _       (   D   W   i   d   t
0076220    h   )   -   1   ,       B   r   a   n   c   h   [   .   +   2
0076240    ,       A   L   U   <   0   ]   ;  \r  \t   I   C   n   t   _
0076260        (   1   S   )   -   T   ;  \t  \t  \t   *       =       (
0076300    2   S   )   -   (   D   W   i   d   t   h   )  \r  \r   *    
0076320    N   e   v   e   r       n   e   e   d       t   o       "   t
0076340    o   u   c   h   "       d   a   t   a       i   n       t   h
0076360    e       "   t   h   i   n   "       c   a   s   e   .  \r   *
0076400        A   L   U   =   0       h   e   r   e       i   f   f    
0076420    t   h   e       "   t   h   i   n   "       c   a   s   e    
0076440    a   p   p   l   i   e   s       (   D   W   i   d   t   h   =
0076460    1   )   .  \r  \t   S   t   a   c   k   _       (   S   t   a
0076500    c   k   )   -   1   ,       B   r   a   n   c   h   [   .   +
0076520    2   ,       A   L   U   #   0   ]   ;  \r  \t   B   B   D   i
0076540    s   p   _       (   B   B   D   i   s   p   )       O   R    
0076560    (   A   d   d   [   N   o   T   o   u   c   h 376 001  \0 326
0076600  277   F   l   g   ]   C   )   ;  \r  \r   *       E   n   t   e
0076620    r       v   e   r   t   i   c   a   l       l   o   o   p    
0076640    w   i   t   h       (   s   c   a   n       l   i   n   e   s
0076660        d   o   n   e   )   -   1       o   n       T   O   S    
0076700    a   n   d       A   L   U   >   =   0   .  \r  \t   M   C   o
0076720    u   n   t   _       T   -   T   -   1   ,       M   e   m   B
0076740    a   s   e   _       B   B   S   r   c   B   R   ;  \r  \t   P
0076760    D   _       A   0   ,       B   r   a   n   c   h   [   B   B
0077000    V   e   r   t   i   c   a   l   L   o   o   p   ]   ;  \r  \r
0077020   \r   *   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0077040    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0077100    -   -   -   -   -   -   -   -   -   -   -   -   -  \r   *    
0077120    B   i   t   B   l   t       v   e   r   t   i   c   a   l    
0077140    l   o   o   p       (   p   e   r   -   s   c   a   n   -   l
0077160    i   n   e   )  \r   *       A   t       t   o   p       o   f
0077200      376 001  \0 214 304   l   o   o   p   ,       t   h   e    
0077220    f   o   l   l   o   w   i   n   g       i   n   v   a   r   i
0077240    a   n   t   s       h   o   l   d   :  \r   *  \t   V   C   o
0077260    u   n   t       =       (   n   u   m   b   e   r       o   f
0077300        s   c   a   n       l   i   n   e   s       r   e   m   a
0077320    i   n   i   n   g   )   -   1  \r   *  \t   S   t   a   c   k
0077340        =       (   n   u   m   b   e   r       o   f       s   c
0077360    a   n       l   i   n   e   s       d   o   n   e   )   -   1
0077400   \r   *  \t   M   e   m   B   a   s   e       =       B   B   S
0077420    r   c   B   R  \r   *  \t   A   L   U   <   0       i   f   f
0077440        d   e   s   t   i   n   a   t   i   o   n       B   R    
0077460    d   i   s   p   l   a   c   e   m   e   n   t       h   a   s
0077500        o   v   e   r   f   l   o   w   e   d  \r   *       V   e
0077520    r   t   i   c   a   l       l   o   o   p       o   v   e   r
0077540    h   e   a   d   :  \r   *  \t       6       c   y   c   l   e
0077560    s       f   o   r       l   o   o   p       c   o   n   t   r
0077600    o   l       a   n   d 376 001  \0 217   n       d   e   s   t
0077620    i   n   a   t   i   o   n       p   o   i   n   t   e   r    
0077640    u   p   d   a   t   e  \r   *  \t   +   4       c   y   c   l
0077660    e   s       f   o   r       s   o   u   r   c   e       p   o
0077700    i   n   t   e   r       u   p   d   a   t   e       i   f    
0077720    s   o   u   r   c   e       i   t   e   m       i   s       u
0077740    s   e   d  \r   *  \t   +   4       c   y   c   l   e   s    
0077760    i   f       i   t   e   m       i   s       g   r   e   a   t
0100000    e   r       t   h   a   n       2   0   B       w   o   r   d
0100020    s       w   i   d   e  \r   *   -   -   -   -   -   -   -   -
0100040    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0100120    -   -   -  \r  \r   B   B   V   e   r   t   i   c   a   l   L
0100140    o   o   p   :  \r  \t   V   C   o   u   n   t   _       (   V
0100160    C   o   u   n   t   )   -   1   ,       T   _       M   D   ,
0100200   \t   *       F   o   r   c   e       f   a 376 001  \0   8   |
0100220    u   l   t   s       f   r   o   m       p   r   e   v   i   o
0100240    u   s       i   t   e   m  \r  \t  \t   B   r   a   n   c   h
0100260    [   B   B   D   o   n   e   O   r   O   v   e   r   f   l   o
0100300    w   ,       A   L   U   <   0   ,       R   <   0   ]   ;  \r
0100320   \r   *       I   f       p   o   s   i   t   i   v   e   ,    
0100340    I   C   n   t       h   a   s       t   h   e       d   e   s
0100360    i   r   e   d       i   n   i   t   i   a   l       v   a   l
0100400    u   e       o   f       C   n   t       (   D   W   i   d   t
0100420    h   -   1   )   .  \r  \t   T   _       N   O   T       (   C
0100440    n   t   _       I   C   n   t   )   ,       B   r   a   n   c
0100460    h   [   S   m   a   l   l   B   l   o   c   k   ,       R   >
0100500    =   0   ]   ;  \r  \r   *       I   t   e   m       g   r   e
0100520    a   t   e   r       t   h   a   n       o   n   e       m   u
0100540    n   c   h       w   i   d   e   .           S   e   t       u
0100560    p       s   e   p   a   r   a   t   e       m   u   n   c   h
0100600        a   n   d       w   o   r   d       c   o   u   n   t   s
0100620  376 001  \0   Q 327   .  \r   *       T       n   o   w       h
0100640    a   s       D   W   i   d   t   h   -   3   ,       w   h   e
0100660    r   e       D   W   i   d   t   h       i   s       t   h   e
0100700        n   u   m   b   e   r       o   f       w   o   r   d   s
0100720        i   n       t   h   e       d   e   s   t   i   n   a   t
0100740    i   o   n  \r   *       i   t   e   m   ,       i   n   c   l
0100760    u   d   i   n   g       f   i   r   s   t       a   n   d    
0101000    l   a   s   t       p   a   r   t   i   a   l       w   o   r
0101020    d   s   .  \r   *       M   C   o   u   n   t       _       (
0101040    D   W   i   d   t   h   -   3   )   /   2   0       -   1   ,
0101060        C   n   t       _       (   D   W   i   d   t   h   -   3
0101100    )       m   o   d       2   0       +   2   .  \r  \t   M   C
0101120    o   u   n   t   _       R   S   H   [   T   ,       4   ]   ;
0101140   \r  \t   T   _       T       A   N   D       (   1   7   C   )
0101160    ;  \r  \t   T   _       T   +   (   2   C   )   ;  \r  \t   M
0101200    C   o   u   n   t   _       (   M   C   o   u   n   t   )   -
0101220    1   ,       C   n 376 001  \0 020 200   t   _       T   ;  \r
0101240   \r   *       T   h   i   s       d   i   s   p   a   t   c   h
0101260        g   o   e   s       t   o       o   n   e       o   f   :
0101300        G   r   a   y   D   s   t   S   e   t   u   p   ,       G
0101320    r   a   y   D   s   t   S   e   t   u   p   &   T   o   u   c
0101340    h   ,  \r   *       S   r   c   D   s   t   S   e   t   u   p
0101360    ,       o   r       S   r   c   D   s   t   S   e   t   u   p
0101400    &   T   o   u   c   h   .  \r   S   m   a   l   l   B   l   o
0101420    c   k   :  \r  \t   B   i   g   B   D   i   s   p   a   t   c
0101440    h   _       B   B   D   i   s   p   ;  \r  \t   S   t   a   c
0101460    k   _       (   S   t   a   c   k   )   +   1   ,  \t  \t   *
0101500        A   d   v   a   n   c   e       s   c   a   n       l   i
0101520    n   e   s       d   o   n   e  \r  \t  \t   B   r   a   n   c
0101540    h   E   x   t   e   r   n   a   l   [   A   d   d   [   B   B
0101560    D   i   s   p   X   ,       H   o   r   i   z   o   n   t   a
0101600    l   D   i   s   p   L   o   c   ]   ]   ;  \r  \f  \r   *   -
0101620    -   -   -   -   -   -   -   -   -   - 376 001  \0   O 345   -
0101640    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0101700    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0101720    A   d   v   a   n   c   e   S   r   c   D   s   t   :  \r   *
0101740        C   o   n   t   r   o   l       r   e   t   u   r   n   s
0101760        h   e   r   e       a   t       t   h   e       e   n   d
0102000        o   f       i   n   d   i   v   i   d   u   a   l       h
0102020    o   r   i   z   o   n   t   a   l       l   o   o   p   s    
0102040    t   h   a   t  \r   *       i   n   v   o   l   v   e       b
0102060    o   t   h       s   o   u   r   c   e       a   n   d       d
0102100    e   s   t   i   n   a   t   i   o   n       i   t   e   m   s
0102120    .  \r   *       B   B   S   r   c   ,       B   B   D   s   t
0102140        p   o   i   n   t       o   n   e       b   e   y   o   n
0102160    d       l   a   s   t       w   o   r   d       p   r   o   c
0102200    e   s   s   e   d   .  \r   *   -   -   -   -   -   -   -   -
0102220    -   -   -   -   -   -   -   -   -   -   -   -   -   -   - 376
0102240  001  \0   / 037   -   -   -   -   -   -   -   -   -   -   -   -
0102260    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0102300    -   -   -   -   -   -   -   -  \r  \t   T   _       S   r   c
0102320    I   n   c   ;  \r  \t   B   B   S   r   c   _       T   _    
0102340    (   B   B   S   r   c   )   +   T   ;  \r  \t   P   r   e   f
0102360    S   r   c   _       T   +   (   S   P   r   e   f   O   f   f
0102400    s   e   t   )   ;  \r  \t   T   _       B   B   D   s   t   ,
0102420        B   r   a   n   c   h   [   S   r   c   B   R   O   v   e
0102440    r   f   l   o   w   ,       A   L   U   <   0   ]   ;  \r  \r
0102460    *   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0102500    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0102540    -   -   -   -   -   -   -   -   -   -   -   -  \r   A   d   v
0102560    a   n   c   e   D   s   t   :  \r   *       C   o   n   t   r
0102600    o   l       r   e   t   u   r   n   s       h   e   r   e    
0102620    a   t       t   h   e       e   n   d       o   f       i   n
0102640    d   i   v   i 376 001  \0   _ 305   d   u   a   l       h   o
0102660    r   i   z   o   n   t   a   l       l   o   o   p   s       t
0102700    h   a   t  \r   *       i   n   v   o   l   v   e       o   n
0102720    l   y       a       d   e   s   t   i   n   a   t   i   o   n
0102740        i   t   e   m       (   a   n   d       g   r   a   y   ,
0102760        w   h   i   c   h       i   s       h   a   n   d   l   e
0103000    d       s   e   p   a   r   a   t   e   l   y   )   .  \r   *
0103020        B   B   D   s   t       a   n   d       T       p   o   i
0103040    n   t       o   n   e       b   e   y   o   n   d       l   a
0103060    s   t       w   o   r   d       p   r   o   c   e   s   s   e
0103100    d   .  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0103120    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0103160    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0103200   \t   B   B   D   s   t   _       T   _       T   +   (   D   s
0103220    t   I   n   c   )   ;  \r  \t   P   r   e   f   D   s   t   _
0103240        T   _       T   +   (   D   P 376 001  \0 006   l   r   e
0103260    f   O   f   f   s   e   t   )   ,  \r  \t  \t   D   b   l   B
0103300    r   a   n   c   h   [   B   B   R   e   s   c   h   e   d   P
0103320    e   n   d   i   n   g   ,       B   B   V   e   r   t   i   c
0103340    a   l   L   o   o   p   ,       R   e   s   c   h   e   d   u
0103360    l   e   ]   ;  \r  \r   S   r   c   B   R   O   v   e   r   f
0103400    l   o   w   :  \r  \t   T   _       M   D   ,       B   r   a
0103420    n   c   h   [   B   B   D   o   n   e   O   r   O   v   e   r
0103440    f   l   o   w   ]   ;  \r  \r  \r   *   -   -   -   -   -   -
0103460    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0103540    -   -   -   -   -  \r   *       E   i   t   h   e   r       V
0103560    C   o   u   n   t       i   s       e   x   h   a   u   s   t
0103600    e   d       o   r       o   n   e       o   f       t   h   e
0103620        B   R       d   i   s   p   l   a   c   e   m   e   n   t
0103640    s       o   v   e   r   f   l   o   w   e   d  \r   * 376 001
0103660   \0 370 344       (   o   r       c   o   n   c   e   i   v   a
0103700    b   l   y       b   o   t   h       e   v   e   n   t   s    
0103720    o   c   c   u   r   r   e   d       a   t       t   h   e    
0103740    s   a   m   e       t   i   m   e   )   .  \r   *       I   f
0103760        V   C   o   u   n   t       i   s       e   x   h   a   u
0104000    s   t   e   d       t   h   e   n       r   e   t   u   r   n
0104020        n   o   r   m   a   l   l   y   ;       o   t   h   e   r
0104040    w   i   s   e       r   e   s   t   a   r   t       B   i   t
0104060    B   l   t   .  \r   *       N   o   t   e   :       s   c   a
0104100    n       l   i   n   e       c   o   u   n   t       a   t    
0104120    T   O   S       i   s       o   n   e       b   e   h   i   n
0104140    d   .  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0104160    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0104220    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0104240    B   B   D   o   n   e   O   r   O   v   e   r   f   l   o   w
0104260    :  \r  \t 376 001  \0 321 324   V   C   o   u   n   t   ,    
0104300    B   r   a   n   c   h   [   .   +   2   ,       R   >   =   0
0104320    ]   ;  \r  \r   *       W   e       j   u   s   t       p   r
0104340    o   c   e   s   s   e   d       t   h   e       l   a   s   t
0104360        s   c   a   n       l   i   n   e   ,       s   o       e
0104400    x   i   t       n   o   r   m   a   l   l   y   .  \r  \t   B
0104420    r   a   n   c   h   [   B   i   t   B   l   t   D   o   n   e
0104440    ]   ;  \r  \r   *       N   o   t       d   o   n   e       y
0104460    e   t   .           R   e   s   t   o   r   e       c   l   o
0104500    b   b   e   r   e   d       A   L   U   F   M       l   o   c
0104520    a   t   i   o   n   s       b   e   f   o   r   e  \r   *    
0104540    t   a   k   i   n   g       i   n   t   e   r   r   u   p   t
0104560    .           N   o   t   e   :       s   c   a   n       l   i
0104600    n   e       c   o   u   n   t       a   t       T   O   S    
0104620    i   s       o   n   e       b   e   h   i   n   d   ,       s
0104640    o       f   i   x       i   t   .  \r  \t   R   B   a   s   e
0104660    _       R   B   a   s   e   [ 376 001  \0   L 344   T   S   P
0104700    ]   ,       S   t   a   c   k   _       (   S   t   a   c   k
0104720    )   +   1   ;  \r  \t   T   _       (   T   S   P   )       -
0104740        1   ,       m   e   m   B   a   s   e   _       S   t   a
0104760    c   k   B   R   ;  \r  \t   s   t   o   r   e   _       T   ,
0105000        d   b   u   f   _       S   t   a   c   k   ,       c   a
0105020    l   l   [   R   e   s   t   o   r   e   A   L   U   F   M   ]
0105040    ;  \r  \t   P   S   T   A   T   E   _       A   0   ,       b
0105060    r   a   n   c   h   [   L   i   s   p   R   e   s   c   h   e
0105100    d   u   l   e   ]   ;  \r  \r  \r   *   -   -   -   -   -   -
0105120    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0105200    -   -   -   -   -  \r   *       R   e   s   c   h   e   d   u
0105220    l   e       p   e   n   d   i   n   g   .           B   r   a
0105240    n   c   h       t   o       t   h   e       r   e   s   c   h
0105260    e   d   u   l   e       t   r   a   p       h   a 376 001  \0
0105300    G 221   n   d   l   e   r   .  \r   *       A   f   t   e   r
0105320        h   a   n   d   l   i   n   g       t   h   e       i   n
0105340    t   e   r   r   u   p   t   ,       i   t       w   i   l   l
0105360        r   e   s   t   a   r   t       t   h   e       B   i   t
0105400    B   l   t       w   i   t   h       t   h   e       s   t   a
0105420    t   e  \r   *       l   e   f   t       o   n       t   h   e
0105440        s   t   a   c   k   .  \r   *   -   -   -   -   -   -   -
0105460    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0105540    -   -   -   -  \r   B   B   R   e   s   c   h   e   d   P   e
0105560    n   d   i   n   g   :  \r  \t   T   _       M   D   ,       B
0105600    r   a   n   c   h   [   B   B   D   o   n   e   O   r   O   v
0105620    e   r   f   l   o   w   ]   ;       *       H   a   n   d   l
0105640    e       t   h   e       s   a   m   e       a   s       o   v
0105660    e   r   f   l   o   w  \r  \r  \r   *   -   -   -   -   -   -
0105700    -   - 376 001  \0  \r   \   -   -   -   -   -   -   -   -   -
0105720    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0105760    -   -   -   -   -   -   -   -   -   -  \r   *       R   e   a
0106000    l   l   y       d   o   n   e   .           R   e   s   t   o
0106020    r   e       c   l   o   b   b   e   r   e   d       A   L   U
0106040    F   M   ,       f   l   u   s   h       s   t   a   c   k   ,
0106060        a   n   d       e   x   i   t   .  \r   *       M   u   s
0106100    t       c   l   e   a   r       t   h   e       l   o   w   -
0106120    o   r   d   e   r       b   i   t       o   f       B   i   t
0106140    B   l   t   A   r   g       s   o       t   h   a   t       i
0106160    f       t   h   e       c   a   l   l   e   r       d   o   e
0106200    s  \r   *       a       P   U   S   H       t   o       r   e
0106220    c   o   v   e   r       i   t   ,       h   e       w   i   l
0106240    l       s   e   e       t   h   e       r   i   g   h   t    
0106260    t   h   i   n   g   .  \r   *   -   -   -   -   -   -   -   -
0106300    -   -   -   -   -   -   - 376 001  \0 304   j   -   -   -   -
0106320    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0106360    -   -   -   -   -   -   -   -  \r   *       G   e   t       h
0106400    e   r   e       d   u   r   i   n   g       i   n   i   t   i
0106420    a   l   i   z   a   t   i   o   n       w   h   e   n       o
0106440    n   l   y       A   L   U   F   M   [   1   7   ]       h   a
0106460    s       b   e   e   n       c   l   o   b   b   e   r   e   d
0106500    .  \r   B   i   t   B   l   t   D   o   n   e   1   :  \r  \t
0106520    N   o   p   ;  \r   B   i   t   B   l   t   D   o   n   e   2
0106540    :  \r  \t   N   o   p   ;  \r  \r   *       G   e   t       h
0106560    e   r   e       a   t       e   n   d       w   h   e   n    
0106600    b   o   t   h       A   L   U   F   M   [   1   7   ]       a
0106620    n   d       A   L   U   F   M   [   1   5   ]       h   a   v
0106640    e       b   e   e   n       c   l   o   b   b   e   r   e   d
0106660    .  \r   B   i   t   B   l   t   D   o   n   e   :  \r  \t   r
0106700    b   a   s   e   _       r   b   a   s   e   [ 376 001  \0 265
0106720  001   L   T   E   M   P   0   ]   ,       c   a   l   l   [   R
0106740    e   s   t   o   r   e   A   L   U   F   M   ]   ;  \r  \t   P
0106760    S   T   A   T   E   _       A   0   ;  \r  \t   L   E   F   T
0107000        _       (   L   E   F   T   )       +       1   ;  \r  \t
0107020    T   S   P   _       (   T   S   P   )       -       (   2   c
0107040    )   ,       N   e   x   t   O   p   c   o   d   e   ;  \r  \f
0107060   \r   *   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0107100    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0107140    -   -   -   -   -   -   -   -   -   -   -   -   -  \r   *    
0107160    H   o   r   i   z   o   n   t   a   l       l   o   o   p   s
0107200   \r   *   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0107220    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0107260    -   -   -   -   -   -   -   -   -   -   -   -   -  \r  \r   %
0107300   \r   O   r   g   a   n   i   z   a   t   i   o   n       o   f
0107320      376 001  \0   Y 376   h   o   r   i   z   o   n   t   a   l
0107340        (   p   e   r   -   w   o   r   d   )       l   o   o   p
0107360    s   :  \r  \r   T   h   e   r   e       a   r   e       a    
0107400    n   u   m   b   e   r       o   f       v   a   r   i   a   t
0107420    i   o   n   s   ,       d   e   p   e   n   d   i   n   g    
0107440    o   n       t   h   e       f   o   l   l   o   w   i   n   g
0107460    :  \r  \t   1   .       W   h   e   t   h   e   r       t   h
0107500    e       s   o   u   r   c   e       i   s       n   o   r   m
0107520    a   l       o   r       g   r   a   y   ;  \r  \t   2   .    
0107540    W   h   e   t   h   e   r       o   r       n   o   t       t
0107560    h   e       d   e   s   t   i   n   a   t   i   o   n       i
0107600    s       a   n       o   p   e   r   a   n   d   ;  \r  \t   3
0107620    .       W   h   e   t   h   e   r       o   r       n   o   t
0107640        t   h   e       d   e   s   t   i   n   a   t   i   o   n
0107660        i   s       "   t   h   i   n   "       (   o   n   e    
0107700    w   o   r   d       p   e   r       s   c   a   n       l   i
0107720    n   e   )   ;  \r  \t 376 001  \0   I 237   4   .       W   h
0107740    e   t   h   e   r       o   r       n   o   t       d   a   t
0107760    a       n   e   e   d       b   e       "   t   o   u   c   h
0110000    e   d   "       b   e   f   o   r   e       d   o   i   n   g
0110020        t   h   e       t   r   a   n   s   f   e   r   .  \r  \r
0110040    T   h   e   r   e       a   r   e       f   e   w   e   r    
0110060    t   h   a   n       1   6       t   o   t   a   l       c   a
0110100    s   e   s       b   e   c   a   u   s   e       s   o   m   e
0110120        o   f       t   h   e   s   e       c   o   m   b   i   n
0110140    a   t   i   o   n   s  \r   c   a   n   n   o   t       o   c
0110160    c   u   r       (   f   o   r       e   x   a   m   p   l   e
0110200    ,       t   h   e       t   h   i   n       c   a   s   e    
0110220    n   e   v   e   r       r   e   q   u   i   r   e   s       t
0110240    o   u   c   h   i   n   g   )   .  \r   E   a   c   h       c
0110260    a   s   e       h   a   s       a       "   s   e   t   u   p
0110300    "       r   o   u   t   i   n   e   ,       a       "   b   o
0110320    d   y   "       r   o   u   t   i   n   e 376 001  \0   .   z
0110340    ,       a   n   d       a       "   f   i   n   i   s   h   "
0110360        r   o   u   t   i   n   e   .  \r   M   a   n   y       o
0110400    f       t   h   e   s   e       r   o   u   t   i   n   e   s
0110420        a   r   e       s   h   a   r   e   d       a   m   o   n
0110440    g       c   a   s   e   s   ,       a   n   d       t   h   e
0110460        f   l   o   w       o   f       c   o   n   t   r   o   l
0110500   \r   i   s       d   e   t   e   r   m   i   n   e   d       b
0110520    y       a       c   o   m   p   l   i   c   a   t   e   d    
0110540    n   e   t   w   o   r   k       o   f       d   i   s   p   a
0110560    t   c   h   e   s       o   n       B   B   D   i   s   p   .
0110600   \r   F   i   n   i   s   h       r   o   u   t   i   n   e   s
0110620        e   x   i   t       t   o       t   h   e       v   e   r
0110640    t   i   c   a   l       l   o   o   p       b   y       a    
0110660    b   r   a   n   c   h       t   o       A   d   v   a   n   c
0110700    e   D   s   t       o   r  \r   A   d   v   a   n   c   e   S
0110720    r   c   D   s   t   .  \r  \r   I   t       i   s       n   e
0110740  376 001  \0 344 260   v   e   r       n   e   c   e   s   s   a
0110760    r   y       t   o       "   t   o   u   c   h   "       i   f
0111000        a   n   y       o   f       t   h   e       f   o   l   l
0111020    o   w   i   n   g       i   s       t   r   u   e   :  \r  \t
0111040    a   .       T   h   e       d   e   s   t   i   n   a   t   i
0111060    o   n       i   s       "   t   h   i   n   "   ;  \r  \t   b
0111100    .       T   h   e       d   e   s   t   i   n   a   t   i   o
0111120    n       i   s       n   o   t       a   n       o   p   e   r
0111140    a   n   d       o   f       t   h   e       B   i   t   B   l
0111160    t       f   u   n   c   t   i   o   n   ;  \r  \t   c   .    
0111200    T   h   e       f   u   n   c   t   i   o   n       c   a   n
0111220        b   e       p   e   r   f   o   r   m   e   d       m   u
0111240    l   t   i   p   l   e       t   i   m   e   s       w   i   t
0111260    h       t   h   e       s   a   m   e       e   f   f   e   c
0111300    t  \r  \t               a   s       p   e   r   f   o   r   m
0111320    i   n   g       i   t       o   n   l   y       o   n   c   e
0111340        (   i   .   e 376 001  \0   ? 232   .   ,       a   n   y
0111360    t   h   i   n   g       e   x   c   e   p   t       X   O   R
0111400    ,  \r  \t               a   s   s   u   m   i   n   g       t
0111420    h   e       s   o   u   r   c   e       a   n   d       d   e
0111440    s   t   i   n   a   t   i   o   n       i   t   e   m   s    
0111460    d   o   n   '   t       o   v   e   r   l   a   p   )   .  \r
0111500    T   h   e       "   t   o   u   c   h   "       a   n   d    
0111520    "   n   o       t   o   u   c   h   "       c   a   s   e   s
0111540        a   r   e       d   i   s   t   i   n   g   u   i   s   h
0111560    e   d       a   s       p   a   r   t       o   f       t   h
0111600    e       d   i   s   p   a   t   c   h   .  \r  \r   T   o    
0111620    r   e   d   u   c   e       m   i   s   s       w   a   i   t
0111640        a   n   d       i   n   c   r   e   a   s   e       p   e
0111660    r   f   o   r   m   a   n   c   e   ,       w   h   i   l   e
0111700        p   r   o   c   e   s   s   i   n   g       e   a   c   h
0111720   \r   s   c   a   n       l   i   n   e       w   e       f   a
0111740    l   l       o   u   t       o   f     376 001  \0 260 256   t
0111760    h   e       m   a   i   n       l   o   o   p       o   n   c
0112000    e       p   e   r       m   u   n   c   h       a   n   d    
0112020    P   r   e   F   e   t   c   h  \r   o   n   e       m   u   n
0112040    c   h       f   o   r       t   h   e       n   e   x   t    
0112060    s   c   a   n       l   i   n   e   .           T   h   i   s
0112100        s   t   r   a   t   e   g   y       d   e   p   e   n   d
0112120    s       o   n       t   h   e  \r   a   s   s   u   m   p   t
0112140    i   o   n       t   h   a   t       e   a   c   h       s   c
0112160    a   n       l   i   n   e       i   s       l   e   s   s    
0112200    t   h   a   n       1   0   0       m   u   n   c   h   e   s
0112220        l   o   n   g       (   f   o   r       a       1   0   0
0112240    -   r   o   w  \r   c   a   c   h   e   ,       w   h   i   c
0112260    h       i   s       w   h   a   t       t   h   e       D   o
0112300    r   a   d   o       h   a   s       a   t       p   r   e   s
0112320    e   n   t   )   .           N   o   t   e       t   h   a   t
0112340        P   r   e   F   e   t   c   h   e   s  \r   a   r   e 376
0112360  001  \0   E 252       d   o   n   e       l   e   f   t   -   t
0112400    o   -   r   i   g   h   t       e   v   e   n       i   f    
0112420    t   r   a   n   s   f   e   r   s       a   r   e       d   o
0112440    n   e       r   i   g   h   t   -   t   o   -   l   e   f   t
0112460    .  \r  \r   N   o   t   e       t   h   a   t       t   h   e
0112500        c   u   r   r   e   n   t       i   m   p   l   e   m   e
0112520    n   t   a   t   i   o   n       i   s       i   m   p   e   r
0112540    f   e   c   t       i   n       t   h   a   t       t   h   e
0112560        l   a   s   t       m   u   n   c   h  \r   o   f       t
0112600    h   e       n   e   x   t       s   c   a   n       l   i   n
0112620    e       m   a   y       n   o   t       b   e       p   r   e
0112640    f   e   t   c   h   e   d   ,       o   r       a   n       e
0112660    x   t   r   a       m   u   n   c   h       p   r   e   f   e
0112700    t   c   h   e   d  \r   u   n   n   e   c   e   s   s   a   r
0112720    i   l   y   ,       b   e   c   a   u   s   e       t   h   e
0112740        m   a   i   n       l   o   o   p       d   o   e   s    
0112760    n   o   t     376 001  \0 324 031   t   e   r   m   i   n   a
0113000    t   e       a   t       m   u   n   c   h       b   o   u   n
0113020    d   a   r   i   e   s  \r   b   u   t       r   a   t   h   e
0113040    r       a   t       m   u   l   t   i   p   l   e   s       o
0113060    f       2   0       w   o   r   d   s       f   r   o   m    
0113100    t   h   e       e   n   d       o   f       t   h   e       s
0113120    c   a   n       l   i   n   e   .  \r   A   l   s   o   ,    
0113140    t   h   e       f   i   r   s   t       s   c   a   n       l
0113160    i   n   e       i   s       n   o   t       p   r   e   f   e
0113200    t   c   h   e   d   ,       a   n   d       a       l   i   n
0113220    e       p   a   s   t       t   h   e       e   n   d       o
0113240    f  \r   t   h   e       l   a   s   t       s   c   a   n    
0113260    l   i   n   e       i   s       p   r   e   f   e   t   c   h
0113300    e   d       u   n   n   e   c   e   s   s   a   r   i   l   y
0113320    .           T   h   e   s   e       d   e   f   e   c   t   s
0113340        s   h   o   u   l   d       n   o   t  \r   a   f   f   e
0113360    c   t       p   e   r   f   o   r 376 001  \0 205 305   m   a
0113400    n   c   e       n   o   t   i   c   e   a   b   l   y       i
0113420    n       n   o   r   m   a   l       u   s   e   .  \r   %  \r
0113440   \r   T   o   p   L   e   v   e   l   ;  \r   K   n   o   w   R
0113460    B   a   s   e   [   B   B   R   e   g   s   ]   ;  \r  \f  \r
0113500    %   *   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0113520    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0113560    -   -   -   -   -   -   -   -   -   -   -   -   -  \r   C   a
0113600    s   e       A   :           d   e   s   t       _       f   (
0113620    g   r   a   y   )  \r  \r   B   B   O   p       i   s       t
0113640    a   k   e   n       f   r   o   m       t   h   e       f   o
0113660    l   l   o   w   i   n   g       t   a   b   l   e   :  \r  \r
0113700                    F   u   n   c   t   i   o   n       (   c   l
0113720    a   s   s   )  \t   g   r   a   y  \t   s   r   c   F   u   n
0113740    c  \t  \t   d   s   t   F   u   n   c  \t  \t   A   L   U    
0113760    o   p   e   r   a   t   i   o   n  \r  \t   1   0     376 001
0114000   \0   Y 320   (   A   )  \t  \t   T   R   U   E  \t   n   o   r
0114020    m   a   l  \t  \t   n   u   l   l  \t  \t   N   O   T       A
0114040   \r  \t   1   4       (   A   )  \t  \t   T   R   U   E  \t   c
0114060    o   m   p   l   e   m   e   n   t  \t   n   u   l   l  \t  \t
0114100    A  \r  \r   E   n   t   r   y       p   o   i   n   t       t
0114120    o       t   h   i   s       c   o   d   e       i   s       a
0114140    t       G   r   a   y   D   e   s   t   S   e   t   u   p   .
0114160   \r   I   t       d   i   s   p   a   t   c   h   e   s       h
0114200    e   r   e       a   f   t   e   r       s   e   t   u   p   .
0114220   \r  \r   T   i   m   i   n   g   ,       p   e   r       s   c
0114240    a   n       l   i   n   e   ,       i   n   c   l   u   d   i
0114260    n   g       v   e   r   t   i   c   a   l       l   o   o   p
0114300        o   v   e   r   h   e   a   d   :  \r  \t   1   9       c
0114320    y   c   l   e   s       m   i   n   i   m   u   m       i   n
0114340        t   h   e       n   o   r   m   a   l       c   a   s   e
0114360   \r  \t   +   1       c   y   c   l   e       p   e   r       f
0114400    u   l   l 376 001  \0   5   j       w   o   r   d       (   e
0114420    x   c   l   u   d   i   n   g       f   i   r   s   t       a
0114440    n   d       l   a   s   t       p   a   r   t   i   a   l    
0114460    w   o   r   d   s   )  \r  \t   +   4       +       (   2    
0114500    *       #       o   f       m   u   n   c   h   e   s   )    
0114520    c   y   c   l   e   s       i   f       i   t   e   m       i
0114540    s       w   i   d   e   r       t   h   a   n       2   0   B
0114560        w   o   r   d   s  \r  \r  \t   1   2       c   y   c   l
0114600    e   s       t   o   t   a   l       i   n       t   h   e    
0114620    "   t   h   i   n   "       c   a   s   e  \r   %   *   -   -
0114640    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0114720    -   -   -   -   -   -   -   -   -  \r  \r   *       E   n   t
0114740    r   y       p   o   i   n   t       f   o   r       s   r   c
0114760    F   u   n   c       =       n   o   r   m   a   l   .  \r   *
0115000        T       h   a   s       f 376 001  \0 320 355   i   r   s
0115020    t       p   a   r   t   i   a   l       w   o   r   d       t
0115040    o       b   e       s   t   o   r   e   d   ,       a   n   d
0115060        S   r   c   W   d       h   a   s       g   r   a   y    
0115100    w   o   r   d   .  \r   G   r   a   y   B   o   d   y   :    
0115120    B   B   A   t   [   G   r   a   y   B   o   d   y   L   o   c
0115140    ]   ,  \r  \t   B   B   D   s   t   _       (   S   t   o   r
0115160    e   _       B   B   D   s   t   )   +   /   -   1   ,       D
0115200    B   u   f   _       T   ;  \r  \t   T   _       S   h   i   f
0115220    t   N   o   M   a   s   k   [   S   r   c   W   d   ]   ,    
0115240    B   r   a   n   c   h   [   G   r   a   y   E   n   d   ,    
0115260    C   n   t   =   0   &   -   1   ]   ;  \r  \r   *       J   u
0115300    s   t       r   e   p   l   i   c   a   t   e       t   h   e
0115320        s   h   i   f   t   e   d       g   r   a   y       w   o
0115340    r   d       t   h   r   o   u   g   h   o   u   t       t   h
0115360    e       d   e   s   t   i   n   a   t   i   o   n       b   o
0115400    d   y   .  \r   G   r   a   y   L   o   o   p   : 376 001  \0
0115420  273 311  \r  \t   B   B   D   s   t   _       (   S   t   o   r
0115440    e   _       B   B   D   s   t   )   +   /   -   1   ,       D
0115460    B   u   f   _       T   ,       B   r   a   n   c   h   [   G
0115500    r   a   y   L   o   o   p   ,       C   n   t   #   0   &   -
0115520    1   ]   ;  \r  \r   G   r   a   y   E   n   d   :  \r  \t   M
0115540    C   o   u   n   t   _       (   M   C   o   u   n   t   )   -
0115560    1   ,       C   n   t   _       1   7   S   ,       B   r   a
0115600    n   c   h   [   G   r   a   y   L   a   s   t   ,       R   <
0115620    0   ]   ;  \r  \t   P   r   e   f   D   s   t   _       (   P
0115640    r   e   F   e   t   c   h   _       P   r   e   f   D   s   t
0115660    )   ,       C   a   r   r   y   2   0   ,       B   r   a   n
0115700    c   h   [   G   r   a   y   L   o   o   p   ]   ;  \r  \r   G
0115720    r   a   y   L   a   s   t   :  \r  \t   F   e   t   c   h   _
0115740        B   B   D   s   t   ,       B   r   a   n   c   h   [   D
0115760    s   t   F   i   n   i   s   h   ]   ;  \r  \r   *       S   t
0116000    o   r   e       l   a   s   t       p   a   r   t   i   a   l
0116020        w 376 001  \0 031 244   o   r   d   .           T   h   i
0116040    s       i   s       t   h   e       t   a   i   l       o   f
0116060        c   a   s   e   s       A       a   n   d       B   .  \r
0116100    *       H   a   v   e       a   l   r   e   a   d   y       f
0116120    e   t   c   h   e   d       t   h   e       l   a   s   t    
0116140    w   o   r   d       (   a   t       B   B   D   s   t   )   .
0116160   \r   D   s   t   F   i   n   i   s   h   :  \r  \t   B   B   D
0116200    i   s   p   ,       B   r   a   n   c   h   [   .   +   2   ,
0116220        R   <   0   ]   ;  \r  \t   T   _       X   S   h   M   D
0116240    R   M   a   s   k   [   S   r   c   W   d   ]   ,       B   _
0116260        M   D   ,       B   r   a   n   c   h   [   S   t   o   r
0116300    e   L   a   s   t   D   s   t   ]   ;  \r  \t   T   _       X
0116320    S   h   M   D   L   M   a   s   k   [   S   r   c   W   d   ]
0116340    ,       B   _       M   D   ,       B   r   a   n   c   h   [
0116360    S   t   o   r   e   L   a   s   t   D   s   t   ]   ;  \r  \r
0116400    *       T   h   i   n       d   e   s   t   i   n   a   t   i
0116420    o   n       s   l   i   c 376 001  \0 355   C   e   ,       f
0116440    o   r       c   a   s   e   s       A       a   n   d       B
0116460    .  \r   D   s   t   T   h   i   n   :  \r  \t   T   _       X
0116500    S   h   M   D   B   o   t   h   M   a   s   k   s   [   S   r
0116520    c   W   d   ]   ,       B   _       M   D   ;  \r   S   t   o
0116540    r   e   L   a   s   t   D   s   t   :  \r  \t   B   B   D   s
0116560    t   _       T   _       (   S   t   o   r   e   _       B   B
0116600    D   s   t   )   +   /   -   1   ,       D   B   u   f   _    
0116620    T   ,       F   l   i   p   M   e   m   B   a   s   e   ,  \r
0116640   \t  \t   B   r   a   n   c   h   [   A   d   v   a   n   c   e
0116660    D   s   t   ]   ;  \r  \f  \r   %   *   -   -   -   -   -   -
0116700    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0116760    -   -   -   -   -  \r   C   a   s   e       B   :           d
0117000    e   s   t       _       f   (   g   r   a   y   ,       d   e
0117020    s   t   )  \r  \r   B   B   O   p       i   s 376 001  \0 231
0117040    w       t   a   k   e   n       f   r   o   m       t   h   e
0117060        f   o   l   l   o   w   i   n   g       t   a   b   l   e
0117100    :  \r  \r                   F   u   n   c   t   i   o   n    
0117120    (   c   l   a   s   s   )  \t   g   r   a   y  \t   s   r   c
0117140    F   u   n   c  \t  \t   d   s   t   F   u   n   c  \t  \t   A
0117160    L   U       o   p   e   r   a   t   i   o   n  \r  \t   1   1
0117200        (   B   )  \t  \t   T   R   U   E  \t   n   o   r   m   a
0117220    l  \t  \t   a   n   d  \t  \t   N   O   T       A       A   N
0117240    D       B  \r  \t   1   2       (   B   )  \t  \t   T   R   U
0117260    E  \t   n   o   r   m   a   l  \t  \t   o   r  \t  \t   N   O
0117300    T       A       O   R       B  \r  \t   1   3       (   B   )
0117320   \t  \t   T   R   U   E  \t   n   o   r   m   a   l  \t  \t   x
0117340    o   r  \t  \t   A       E   Q   V       B  \r  \t   1   5    
0117360    (   B   )  \t  \t   T   R   U   E  \t   c   o   m   p   l   e
0117400    m   e   n   t  \t   a   n   d  \t  \t   A       A   N   D    
0117420    B  \r  \t   1   6       (   B   )  \t  \t   T   R   U   E  \t
0117440    c 376 001  \0 322 317   o   m   p   l   e   m   e   n   t  \t
0117460    o   r  \t  \t   A       O   R       B  \r  \t   1   7       (
0117500    B   )  \t  \t   T   R   U   E  \t   c   o   m   p   l   e   m
0117520    e   n   t  \t   x   o   r  \t  \t   A       X   O   R       B
0117540   \r  \r   T   h   e       g   r   a   y       w   o   r   d    
0117560    i   s       k   e   p   t       i   n       S   r   c   W   d
0117600        a   n   d       p   u   t       d   i   r   e   c   t   l
0117620    y       i   n   t   o       t   h   e       s   h   i   f   t
0117640    e   r   .  \r  \r   C   a   s   e       A       a   l   s   o
0117660        d   i   s   p   a   t   c   h   e   s       t   o       o
0117700    n   e       o   f       c   a   s   e       B   '   s       e
0117720    n   t   r   y       p   o   i   n   t   s   ,       G   r   a
0117740    y   D   s   t   S   e   t   u   p   .  \r   T   h   e       s
0117760    e   t   u   p       c   o   d   e       d   i   s   p   a   t
0120000    c   h   e   s       t   o       t   h   e       c   o   r   r
0120020    e   c   t       b   o   d   y       r   o   u   t   i   n   e
0120040    .  \r  \r   T   i   m 376 001  \0   u 367   i   n   g   ,    
0120060    p   e   r       s   c   a   n       l   i   n   e   ,       i
0120100    n   c   l   u   d   i   n   g       v   e   r   t   i   c   a
0120120    l       l   o   o   p       o   v   e   r   h   e   a   d   :
0120140   \r  \t   1   8       c   y   c   l   e   s       m   i   n   i
0120160    m   u   m       i   n       t   h   e       n   o   r   m   a
0120200    l       c   a   s   e  \r  \t   +   3       c   y   c   l   e
0120220    s       p   e   r       f   u   l   l       w   o   r   d    
0120240    (   e   x   c   l   u   d   i   n   g       f   i   r   s   t
0120260        a   n   d       l   a   s   t       p   a   r   t   i   a
0120300    l       w   o   r   d   s   )  \r  \t   +   6       +       (
0120320    2       *       #       o   f       p   a   g   e   s   )    
0120340    c   y   c   l   e   s       i   f       d   a   t   a       n
0120360    e   e   d   s       t   o       b   e       "   t   o   u   c
0120400    h   e   d   "  \r  \t   +   4       +       (   2       *    
0120420    #       o   f       m   u   n   c   h   e   s   )       c   y
0120440    c   l   e   s       i   f       i   t   e 376 001  \0   a   f
0120460    m       i   s       w   i   d   e   r       t   h   a   n    
0120500    2   0   B       w   o   r   d   s  \r  \r  \t   1   3       c
0120520    y   c   l   e   s       t   o   t   a   l       i   n       t
0120540    h   e       "   t   h   i   n   "       c   a   s   e  \r   %
0120560    *   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
0120600    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0120640    -   -   -   -   -   -   -   -   -   -   -   -  \r  \r   G   r
0120660    a   y   D   s   t   S   e   t   u   p   &   T   o   u   c   h
0120700    :       B   B   A   t   [   G   r   a   y   D   s   t   S   e
0120720    t   u   p   &   T   o   u   c   h   L   o   c   ]   ,  \r  \t
0120740    T   _       D   R   a   s   t   ,       F   l   i   p   M   e
0120760    m   B   a   s   e   ,       C   a   l   l   [   T   o   u   c
0121000    h   D   s   t   ]   ;  \r  \t   F   l   i   p   M   e   m   B
0121020    a   s   e   ;  \r  \r   G   r   a   y   D   s   t   S   e   t
0121040    u   p   :       B   B   A   t   [   G   r   a   y   D   s   t
0121060  376 001  \0 253   9   S   e   t   u   p   L   o   c   ]   ,  \r
0121100   \t   T   _       B   B   S   r   c   _       (   F   e   t   c
0121120    h   _       B   B   S   r   c   )   +   1   ,       F   l   i
0121140    p   M   e   m   B   a   s   e   ;       *       F   e   t   c
0121160    h       g   r   a   y       w   o   r   d  \r  \t   S   r   c
0121200    W   d   _       M   D   ,       F   e   t   c   h   _       B
0121220    B   D   s   t   ,  \t   *       S   r   c   W   d   _       g
0121240    r   a   y       w   o   r   d  \r  \t  \t   B   r   a   n   c
0121260    h   [   .   +   2   ,       A   L   U   <   0   ]   ;  \t   *
0121300        E   x   h   a   u   s   t   e   d       g   r   a   y    
0121320    b   l   o   c   k   ?  \r  \t   B   B   S   r   c   _       T
0121340    -   (   G   r   a   y   B   u   m   p   )   -   1   ;  \t  \t
0121360    *       Y   e   s   ,       r   e   s   e   t       f   o   r
0121400        n   e   x   t       s   c   a   n       l   i   n   e  \r
0121420   \r  \t   P   r   e   f   D   s   t   _       (   P   r   e   F
0121440    e   t   c   h   _       P   r   e   f   D   s   t   )   ,    
0121460    C   a   r   r   y 376 001  \0   w   3   2   0   ,       B   r
0121500    a   n   c   h   [   D   s   t   T   h   i   n   ,       C   n
0121520    t   =   0   &   -   1   ]   ;  \r   *       T   h   e       f
0121540    o   l   l   o   w   i   n   g       d   i   s   p   a   t   c
0121560    h       m   a   y       m   o   d   i   f   y       G   r   a
0121600    y   B   o   d   y       t   o       G   r   a   y   D   s   t
0121620    B   o   d   y   .  \r  \t   B   i   g   B   D   i   s   p   a
0121640    t   c   h   _       B   B   D   i   s   p   ,       B   r   a
0121660    n   c   h   [   .   +   2   ,       R   <   0   ]   ;  \r  \t
0121700    T   _       X   S   h   M   D   L   M   a   s   k   [   S   r
0121720    c   W   d   ]   ,       B   _       M   D   ,       B   r   a
0121740    n   c   h   [   G   r   a   y   B   o   d   y   ]   ;  \r  \t
0121760    T   _       X   S   h   M   D   R   M   a   s   k   [   S   r
0122000    c   W   d   ]   ,       B   _       M   D   ,       B   r   a
0122020    n   c   h   [   G   r   a   y   B   o   d   y   ]   ;  \r  \r
0122040    *       B   o   d   y       r   o   u   t   i   n   e       f
0122060    o   r       c   a   s   e       B     376 001  \0 364   ?   o
0122100    n   l   y   .  \r   G   r   a   y   D   s   t   B   o   d   y
0122120    :       B   B   A   t   [   G   r   a   y   D   s   t   B   o
0122140    d   y   L   o   c   ]   ,  \r  \t   B   B   D   s   t   _    
0122160    T   _       (   S   t   o   r   e   _       B   B   D   s   t
0122200    )   +   /   -   1   ,       D   B   u   f   _       T   ;  \r
0122220   \t   P   r   e   f   S   r   c   _       (   F   e   t   c   h
0122240    _       T   )   +   /   -   1   ,       B   r   a   n   c   h
0122260    [   G   r   a   y   D   s   t   E   n   d   ,       C   n   t
0122300    =   0   &   -   1   ]   ;  \r  \r   *       I   n   n   e   r
0122320        l   o   o   p       r   u   n   s       w   i   t   h    
0122340    o   n   e       w   o   r   d       f   e   t   c   h   e   d
0122360        a   h   e   a   d       (   n   o   w       i   n       M
0122400    D   )   .  \r   *       P   r   e   f   S   r   c       i   s
0122420        u   s   e   d       a   s       a       t   e   m   p   o
0122440    r   a   r   y       -   -       r   u   n   s       o   n   e
0122460        w   o   r   d       a   h   e   a   d       o   f     376
0122500  001  \0 317 036   B   B   D   s   t   .  \r   G   r   a   y   D
0122520    s   t   L   o   o   p   :  \r  \t   P   r   e   f   S   r   c
0122540    _       (   F   e   t   c   h   _       P   r   e   f   S   r
0122560    c   )   +   /   -   1   ,       T   _       M   D   ;  \r  \t
0122600    T   _       X   S   h   i   f   t   N   o   M   a   s   k   [
0122620    S   r   c   W   d   ]   ,       B   _       T   ;  \r  \t   B
0122640    B   D   s   t   _       (   S   t   o   r   e   _       B   B
0122660    D   s   t   )   +   /   -   1   ,       D   B   u   f   _    
0122700    T   ,       B   r   a   n   c   h   [   G   r   a   y   D   s
0122720    t   L   o   o   p   ,       C   n   t   #   0   &   -   1   ]
0122740    ;  \r  \r   G   r   a   y   D   s   t   E   n   d   :  \r  \t
0122760    M   C   o   u   n   t   _       (   M   C   o   u   n   t   )
0123000    -   1   ,       C   n   t   _       1   7   S   ,       B   r
0123020    a   n   c   h   [   D   s   t   F   i   n   i   s   h   ,    
0123040    R   <   0   ]   ;  \r  \t   P   r   e   f   D   s   t   _    
0123060    (   P   r   e   F   e   t   c   h   _       P   r   e   f   D
0123100    s   t   )   , 376 001  \0 334 312       C   a   r   r   y   2
0123120    0   ,       B   r   a   n   c   h   [   G   r   a   y   D   s
0123140    t   L   o   o   p   ]   ;  \r  \f  \r   %   *   -   -   -   -
0123160    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0123240    -   -   -   -   -   -   -  \r   C   a   s   e       C   :    
0123260        d   e   s   t       _       f   (   s   o   u   r   c   e
0123300    )  \r  \r   B   B   O   p       i   s       t   a   k   e   n
0123320        f   r   o   m       t   h   e       f   o   l   l   o   w
0123340    i   n   g       t   a   b   l   e   :  \r  \r                
0123360    F   u   n   c   t   i   o   n       (   c   l   a   s   s   )
0123400   \t   g   r   a   y  \t   s   r   c   F   u   n   c  \t  \t   d
0123420    s   t   F   u   n   c  \t  \t   A   L   U       o   p   e   r
0123440    a   t   i   o   n  \r  \t       0       (   C   )  \t  \t   F
0123460    A   L   S   E  \t   n   o   r   m   a   l  \t  \t   n   u   l
0123500    l  \t  \t   N   O   T       A  \r 376 001  \0   ^ 247  \t    
0123520    4       (   C   )  \t  \t   F   A   L   S   E  \t   c   o   m
0123540    p   l   e   m   e   n   t  \t   n   u   l   l  \t  \t   A  \r
0123560   \r   E   n   t   r   y       p   o   i   n   t   s       t   o
0123600        t   h   i   s       c   o   d   e       a   r   e       a
0123620    t       S   r   c   D   s   t   S   e   t   u   p       a   n
0123640    d       S   r   c   D   s   t   S   e   t   u   p   &   T   o
0123660    u   c   h   .  \r   T   h   e   y       d   i   s   p   a   t
0123700    c   h       h   e   r   e       a   f   t   e   r       s   e
0123720    t   u   p   .  \r  \r   T   i   m   i   n   g   ,       p   e
0123740    r       s   c   a   n       l   i   n   e   ,       i   n   c
0123760    l   u   d   i   n   g       v   e   r   t   i   c   a   l    
0124000    l   o   o   p       o   v   e   r   h   e   a   d   :  \r  \t
0124020    2   5       c   y   c   l   e   s       m   i   n   i   m   u
0124040    m       i   n       t   h   e       n   o   r   m   a   l    
0124060    c   a   s   e  \r  \t   +   4       c   y   c   l   e   s    
0124100    p   e   r       f   u   l   l       w   o   r   d     376 001
0124120   \0 027   =   (   e   x   c   l   u   d   i   n   g       f   i
0124140    r   s   t       a   n   d       l   a   s   t       p   a   r
0124160    t   i   a   l       w   o   r   d   s   )  \r  \t   +   1   2
0124200        +       (   4       *       #       o   f       p   a   g
0124220    e   s   )       c   y   c   l   e   s       i   f       d   a
0124240    t   a       n   e   e   d   s       t   o       b   e       "
0124260    t   o   u   c   h   e   d   "  \r  \t   +   1       c   y   c
0124300    l   e       i   f       2       s   o   u   r   c   e       w
0124320    o   r   d   s       a   r   e       r   e   q   u   i   r   e
0124340    d       f   o   r       t   h   e       f   i   r   s   t    
0124360    d   e   s   t   i   n   a   t   i   o   n       w   o   r   d
0124400   \r  \t   +   3       c   y   c   l   e   s       i   f       g
0124420    r   a   y       i   s       r   e   q   u   i   r   e   d  \r
0124440   \t   +   4       +       (   5       *       #       o   f    
0124460    m   u   n   c   h   e   s   )       c   y   c   l   e   s    
0124500    i   f       i   t   e   m       i   s       w   i   d   e   r
0124520        t   h 376 001  \0   [ 210   a   n       2   0   B       w
0124540    o   r   d   s  \r  \r  \t   1   7       c   y   c   l   e   s
0124560        m   i   n   i   m   u   m       i   n       t   h   e    
0124600    "   t   h   i   n   "       c   a   s   e  \r  \t   +   1    
0124620    c   y   c   l   e       i   f       2       s   o   u   r   c
0124640    e       w   o   r   d   s       a   r   e       r   e   q   u
0124660    i   r   e   d  \r   %   *   -   -   -   -   -   -   -   -   -
0124700    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0124760    -   -  \r  \r  \r   *       B   o   d   y       r   o   u   t
0125000    i   n   e       f   o   r       c   a   s   e       C       o
0125020    n   l   y   .  \r   S   r   c   B   o   d   y   :       B   B
0125040    A   t   [   S   r   c   B   o   d   y   L   o   c   ]   ,  \r
0125060   \t   T   _       B   B   D   s   t   _       (   S   t   o   r
0125100    e   _       B   B   D   s   t   )   +   /   -   1   ,       D
0125120    B   u   f   _       T   ,     376 001  \0   T 214   F   l   i
0125140    p   M   e   m   B   a   s   e   ,  \r   *   *   *   *       P
0125160    r   o   g   r   a   m       a   r   o   u   n   d       M   i
0125200    c   r   o   D       p   r   o   b   l   e   m   .           D
0125220    e   s   i   r   e   d       b   r   a   n   c   h       c   l
0125240    a   u   s   e       i   s   :  \r   *   *   *   *  \t  \t   C
0125260    a   l   l   [   S   r   c   E   n   d   ,       C   n   t   =
0125300    0   &   -   1   ]   ;  \r   *   *   *   *       b   u   t    
0125320    w   e       m   u   s   t       a   c   t   u   a   l   l   y
0125340        w   r   i   t   e   :  \r  \t  \t   B   R   G   O   @   [
0125360    0   ]       R   E   T   C   L   @   [   2   ]       J   C   N
0125400    [   4   3   ]   ;  \r  \t   B   B   S   r   c   _       (   F
0125420    e   t   c   h   _       B   B   S   r   c   )   +   /   -   1
0125440    ,       F   l   i   p   M   e   m   B   a   s   e   ,  \r  \t
0125460   \t   B   B   A   t   [   S   r   c   B   o   d   y   L   o   c
0125500    ,       1   ]   ;       *   *   *   *       M   i   c   r   o
0125520    D       p   r   o   b   l   e   m  \r  \t   S   r 376 001  \0
0125540  257 032   c   W   d   _       M   D   ,       T   _       S   r
0125560    c   W   d   ;  \r  \t   T   _       X   S   h   i   f   t   N
0125600    o   M   a   s   k   [   S   r   c   W   d   ]   ,       B   r
0125620    a   n   c   h   [   S   r   c   B   o   d   y   ]   ;  \r  \r
0125640    *       T   h   i   s       i   s       c   a   l   l   e   d
0125660        a   s       a       s   u   b   r   o   u   t   i   n   e
0125700        a   t       t   h   e       e   n   d       o   f       e
0125720    a   c   h       m   u   n   c   h   .  \r   *       I   t    
0125740    e   i   t   h   e   r       e   x   i   t   s       t   h   e
0125760        h   o   r   i   z   o   n   t   a   l       l   o   o   p
0126000        o   r       r   e   t   u   r   n   s       t   o       d
0126020    o       a   n   o   t   h   e   r       m   u   n   c   h   .
0126040   \r   S   r   c   E   n   d   :  \r   S   u   b   r   o   u   t
0126060    i   n   e   ;  \r  \t   M   C   o   u   n   t   _       (   M
0126100    C   o   u   n   t   )   -   1   ,       C   n   t   _       1
0126120    7   S   ,  \r  \t  \t   D   b   l   B   r   a   n   c   h   [
0126140    S   r 376 001  \0   a   N   c   D   s   t   F   i   n   i   s
0126160    h   ,       S   r   c   D   s   t   M   o   r   e   ,       R
0126200    <   0   ]   ,  \r  \t  \t   B   B   A   t   [   S   r   c   B
0126220    o   d   y   L   o   c   ,       2   ]   ;       *   *   *   *
0126240        M   i   c   r   o   D       p   r   o   b   l   e   m  \r
0126260    S   r   c   D   s   t   M   o   r   e   :  \r  \t   P   r   e
0126300    f   S   r   c   _       (   P   r   e   F   e   t   c   h   _
0126320        P   r   e   f   S   r   c   )   ,       C   a   r   r   y
0126340    2   0   ;  \r  \t   F   l   i   p   M   e   m   B   a   s   e
0126360    ;  \r  \t   P   r   e   f   D   s   t   _       (   P   r   e
0126400    F   e   t   c   h   _       P   r   e   f   D   s   t   )   ,
0126420        C   a   r   r   y   2   0   ;  \r  \t   F   l   i   p   M
0126440    e   m   B   a   s   e   ,       R   e   t   u   r   n   ;  \r
0126460    T   o   p   L   e   v   e   l   ;  \r  \r   *       S   t   o
0126500    r   e       l   a   s   t       p   a   r   t   i   a   l    
0126520    w   o   r   d   ,       f   o   r       c   a   s   e   s    
0126540    C       a   n   d       D 376 001  \0 254   s   .  \r   S   r
0126560    c   D   s   t   F   i   n   i   s   h   :  \r  \t   B   B   C
0126600    t   r   l   ,       B   r   a   n   c   h   [   .   +   2   ,
0126620        R       e   v   e   n   ]   ;  \t   *       F   e   t   c
0126640    h       e   x   t   r   a       w   o   r   d       a   t    
0126660    e   n   d   ?  \r  \t   B   B   S   r   c   _       (   F   e
0126700    t   c   h   _       B   B   S   r   c   )   +   /   -   1   ,
0126720        F   l   i   p   M   e   m   B   a   s   e   ,       B   r
0126740    a   n   c   h   [   .   +   2   ]   ;  \r  \t   F   l   i   p
0126760    M   e   m   B   a   s   e   ;  \r  \t   S   r   c   W   d   _
0127000        M   D   ,       T   _       S   r   c   W   d   ,       F
0127020    e   t   c   h   _       T   ;  \r  \t   B   B   D   i   s   p
0127040    ,       B   r   a   n   c   h   [   .   +   2   ,       R   <
0127060    0   ]   ;  \r  \t   T   _       X   S   h   M   D   R   M   a
0127100    s   k   [   S   r   c   W   d   ]   ,       B   _       M   D
0127120    ,       B   r   a   n   c   h   [   S   t   o   r   e   L   a
0127140    s   t   S   r   c   D   s   t   ]   ;  \r  \t 376 001  \0 274
0127160    S   T   _       X   S   h   M   D   L   M   a   s   k   [   S
0127200    r   c   W   d   ]   ,       B   _       M   D   ,       B   r
0127220    a   n   c   h   [   S   t   o   r   e   L   a   s   t   S   r
0127240    c   D   s   t   ]   ;  \r  \r   *       T   h   i   n       d
0127260    e   s   t   i   n   a   t   i   o   n       s   l   i   c   e
0127300    ,       f   o   r       c   a   s   e   s       C       a   n
0127320    d       D   .  \r   S   r   c   D   s   t   T   h   i   n   :
0127340   \r  \t   T   _       X   S   h   M   D   B   o   t   h   M   a
0127360    s   k   s   [   S   r   c   W   d   ]   ,       B   _       M
0127400    D   ;  \r   S   t   o   r   e   L   a   s   t   S   r   c   D
0127420    s   t   :  \r  \t   B   B   D   s   t   _       (   S   t   o
0127440    r   e   _       B   B   D   s   t   )   +   /   -   1   ,    
0127460    D   B   u   f   _       T   ,       F   l   i   p   M   e   m
0127500    B   a   s   e   ,  \r  \t  \t   B   r   a   n   c   h   [   A
0127520    d   v   a   n   c   e   S   r   c   D   s   t   ]   ;  \r  \f
0127540   \r   %   *   -   -   -   -   -   -   -   -   -   -   -   -   -
0127560    - 376 001  \0     243   -   -   -   -   -   -   -   -   -   -
0127600    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0127640    -   -   -  \r   C   a   s   e       D   :           d   e   s
0127660    t       _       f   (   s   o   u   r   c   e   ,       d   e
0127700    s   t   )  \r  \r   B   B   O   p       i   s       t   a   k
0127720    e   n       f   r   o   m       t   h   e       f   o   l   l
0127740    o   w   i   n   g       t   a   b   l   e   :  \r  \r        
0127760            F   u   n   c   t   i   o   n       (   c   l   a   s
0130000    s   )  \t   g   r   a   y  \t   s   r   c   F   u   n   c  \t
0130020   \t   d   s   t   F   u   n   c  \t  \t   A   L   U       o   p
0130040    e   r   a   t   i   o   n  \r  \t       1       (   D   )  \t
0130060   \t   F   A   L   S   E  \t   n   o   r   m   a   l  \t  \t   a
0130100    n   d  \t  \t   N   O   T       A       A   N   D       B  \r
0130120   \t       2       (   D   )  \t  \t   F   A   L   S   E  \t   n
0130140    o   r   m   a   l  \t  \t   o   r  \t  \t   N   O   T       A
0130160        O   R       B  \r 376 001  \0   s 210  \t       3       (
0130200    D   )  \t  \t   F   A   L   S   E  \t   n   o   r   m   a   l
0130220   \t  \t   x   o   r  \t  \t   A       E   Q   V       B  \r  \t
0130240        5       (   D   )  \t  \t   F   A   L   S   E  \t   c   o
0130260    m   p   l   e   m   e   n   t  \t   a   n   d  \t  \t   A    
0130300    A   N   D       B  \r  \t       6       (   D   )  \t  \t   F
0130320    A   L   S   E  \t   c   o   m   p   l   e   m   e   n   t  \t
0130340    o   r  \t  \t   A       O   R       B  \r  \t       7       (
0130360    D   )  \t  \t   F   A   L   S   E  \t   c   o   m   p   l   e
0130400    m   e   n   t  \t   x   o   r  \t  \t   A       X   O   R    
0130420    B  \r  \r   C   a   s   e       C       a   l   s   o       d
0130440    i   s   p   a   t   c   h   e   s       t   o       t   h   e
0130460    s   e       e   n   t   r   y       p   o   i   n   t   s   .
0130500   \r   T   h   e       s   e   t   u   p       c   o   d   e    
0130520    d   i   s   p   a   t   c   h   e   s       t   o       t   h
0130540    e       c   o   r   r   e   c   t       b   o   d   y       r
0130560    o   u   t   i   n   e   s   .  \r  \r   T 376 001  \0 031 215
0130600    i   m   i   n   g   ,       p   e   r       s   c   a   n    
0130620    l   i   n   e   ,       i   n   c   l   u   d   i   n   g    
0130640    v   e   r   t   i   c   a   l       l   o   o   p       o   v
0130660    e   r   h   e   a   d   :  \r  \t       2   5       c   y   c
0130700    l   e   s       m   i   n   i   m   u   m       i   n       t
0130720    h   e       n   o   r   m   a   l       c   a   s   e  \r  \t
0130740    +       5       c   y   c   l   e   s       p   e   r       f
0130760    u   l   l       w   o   r   d       (   e   x   c   l   u   d
0131000    i   n   g       f   i   r   s   t       a   n   d       l   a
0131020    s   t       p   a   r   t   i   a   l       w   o   r   d   s
0131040    )  \r  \t   +   1   2       +       (   4       *       #    
0131060    o   f       p   a   g   e   s   )       c   y   c   l   e   s
0131100        i   f       d   a   t   a       n   e   e   d   s       t
0131120    o       b   e       "   t   o   u   c   h   e   d   "  \r  \t
0131140    +       1       c   y   c   l   e       i   f       2       s
0131160    o   u   r   c   e       w   o   r   d   s       r   e   q   u
0131200  376 001  \0   )  \0   i   r   e   d       f   o   r       t   h
0131220    e       f   i   r   s   t       d   e   s   t   i   n   a   t
0131240    i   o   n       w   o   r   d  \r  \t   +       3       c   y
0131260    c   l   e   s       i   f       g   r   a   y       i   s    
0131300    r   e   q   u   i   r   e   d  \r  \t   +       4       +    
0131320    (   5       *       #       o   f       m   u   n   c   h   e
0131340    s   )       c   y   c   l   e   s       i   f       i   t   e
0131360    m       i   s       w   i   d   e   r       t   h   a   n    
0131400    2   0   B       w   o   r   d   s  \r  \r  \t       1   7    
0131420    c   y   c   l   e   s       m   i   n   i   m   u   m       i
0131440    n       t   h   e       "   t   h   i   n   "       c   a   s
0131460    e  \r  \t   +       1       c   y   c   l   e       i   f    
0131500    2       s   o   u   r   c   e       w   o   r   d   s       a
0131520    r   e       r   e   q   u   i   r   e   d  \r   %   *   -   -
0131540    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0131600    -   -   -   -   - 376 001  \0   &   /   -   -   -   -   -   -
0131620    -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r  \r
0131640    S   r   c   D   s   t   S   e   t   u   p   &   T   o   u   c
0131660    h   :       B   B   A   t   [   S   r   c   D   s   t   S   e
0131700    t   u   p   &   T   o   u   c   h   L   o   c   ]   ,  \r  \t
0131720    T   _       D   R   a   s   t   ,       F   l   i   p   M   e
0131740    m   B   a   s   e   ,       C   a   l   l   [   T   o   u   c
0131760    h   D   s   t   ]   ;  \r  \t   T   _       S   R   a   s   t
0132000    ,       F   l   i   p   M   e   m   B   a   s   e   ,       C
0132020    a   l   l   [   T   o   u   c   h   S   r   c   ]   ;  \r   S
0132040    r   c   D   s   t   S   e   t   u   p   :       B   B   A   t
0132060    [   S   r   c   D   s   t   S   e   t   u   p   L   o   c   ]
0132100    ,  \r  \t   B   B   C   t   r   l   ,       D   b   l   B   r
0132120    a   n   c   h   [   S   r   c   D   s   t   S   e   t   u   p
0132140    2   ,       S   r   c   D   s   t   S   e   t   u   p   1   ,
0132160        R   <   0   ]   ;  \r  \r   S   r   c   D   s   t   S   e
0132200    t   u   p   2   :  \r  \t   B   B   S 376 001  \0 216   *   r
0132220    c   _       (   F   e   t   c   h   _       B   B   S   r   c
0132240    )   +   /   -   1   ;  \r   S   r   c   D   s   t   S   e   t
0132260    u   p   1   :  \r  \t   P   r   e   f   S   r   c   _       (
0132300    P   r   e   F   e   t   c   h   _       P   r   e   f   S   r
0132320    c   )   ,       C   a   r   r   y   2   0   ;  \r  \t   T   _
0132340        M   D   ,       B   B   S   r   c   _       (   F   e   t
0132360    c   h   _       B   B   S   r   c   )   +   /   -   1   ,    
0132400    F   l   i   p   M   e   m   B   a   s   e   ;  \r  \t   S   r
0132420    c   W   d   _       M   D   ,       F   e   t   c   h   _    
0132440    B   B   D   s   t   ;  \r  \t   P   r   e   f   D   s   t   _
0132460        (   P   r   e   F   e   t   c   h   _       P   r   e   f
0132500    D   s   t   )   ,       C   a   r   r   y   2   0   ,       B
0132520    r   a   n   c   h   [   S   r   c   D   s   t   T   h   i   n
0132540    ,       C   n   t   =   0   &   -   1   ]   ;  \r   *       T
0132560    h   e       f   o   l   l   o   w   i   n   g       d   i   s
0132600    p   a   t   c   h       m   a   y       m   o   d   i   f 376
0132620  001  \0   < 037   y       S   r   c   B   o   d   y       t   o
0132640        S   r   c   D   s   t   B   o   d   y   .  \r  \t   B   i
0132660    g   B   D   i   s   p   a   t   c   h   _       B   B   D   i
0132700    s   p   ,       B   r   a   n   c   h   [   .   +   2   ,    
0132720    R   <   0   ]   ;  \r  \t   T   _       X   S   h   M   D   L
0132740    M   a   s   k   [   S   r   c   W   d   ]   ,       B   _    
0132760    M   D   ,       B   r   a   n   c   h   [   S   r   c   B   o
0133000    d   y   ]   ;  \r  \t   T   _       X   S   h   M   D   R   M
0133020    a   s   k   [   S   r   c   W   d   ]   ,       B   _       M
0133040    D   ,       B   r   a   n   c   h   [   S   r   c   B   o   d
0133060    y   ]   ;  \r  \r   *       B   o   d   y       r   o   u   t
0133100    i   n   e       f   o   r       c   a   s   e       D       o
0133120    n   l   y   .  \r   S   r   c   D   s   t   B   o   d   y   :
0133140        B   B   A   t   [   S   r   c   D   s   t   B   o   d   y
0133160    L   o   c   ]   ,  \r  \t   T   _       B   B   D   s   t   _
0133200        (   S   t   o   r   e   _       B   B   D   s   t   )   +
0133220    /   -   1   , 376 001  \0   p 266       D   B   u   f   _    
0133240    T   ,       F   l   i   p   M   e   m   B   a   s   e   ,  \r
0133260    *   *   *   *       P   r   o   g   r   a   m       a   r   o
0133300    u   n   d       M   i   c   r   o   D       p   r   o   b   l
0133320    e   m   .           D   e   s   i   r   e   d       b   r   a
0133340    n   c   h       c   l   a   u   s   e       i   s   :  \r   *
0133360    *   *   *  \t  \t   C   a   l   l   [   S   r   c   D   s   t
0133400    E   n   d   ,       C   n   t   =   0   &   -   1   ]   ;  \r
0133420    *   *   *   *       b   u   t       w   e       m   u   s   t
0133440        a   c   t   u   a   l   l   y       w   r   i   t   e   :
0133460   \r  \t  \t   B   R   G   O   @   [   0   ]       R   E   T   C
0133500    L   @   [   2   ]       J   C   N   [   1   0   3   ]   ;  \r
0133520   \t   B   B   S   r   c   _       (   F   e   t   c   h   _    
0133540    B   B   S   r   c   )   +   /   -   1   ,       F   l   i   p
0133560    M   e   m   B   a   s   e   ,  \r  \t  \t   B   B   A   t   [
0133600    S   r   c   D   s   t   B   o   d   y   L   o   c   ,       1
0133620    ]   ;       *   *   *   *       M 376 001  \0  \t 277   i   c
0133640    r   o   D       p   r   o   b   l   e   m  \r  \t   S   r   c
0133660    W   d   _       M   D   ,       T   _       S   r   c   W   d
0133700    ,       F   e   t   c   h   _       T   ;  \r  \t   T   _    
0133720    X   S   h   i   f   t   N   o   M   a   s   k   [   S   r   c
0133740    W   d   ]   ,       B   _       M   D   ,       B   r   a   n
0133760    c   h   [   S   r   c   D   s   t   B   o   d   y   ]   ;  \r
0134000   \r   *       T   h   i   s       i   s       c   a   l   l   e
0134020    d       a   s       a       s   u   b   r   o   u   t   i   n
0134040    e       a   t       t   h   e       e   n   d       o   f    
0134060    e   a   c   h       m   u   n   c   h   .  \r   *       I   t
0134100        e   i   t   h   e   r       e   x   i   t   s       t   h
0134120    e       h   o   r   i   z   o   n   t   a   l       l   o   o
0134140    p       o   r       r   e   t   u   r   n   s       t   o    
0134160    d   o       a   n   o   t   h   e   r       m   u   n   c   h
0134200    .  \r   S   r   c   D   s   t   E   n   d   :  \r   S   u   b
0134220    r   o   u   t   i   n   e   ;  \r  \t   M   C   o   u 376 001
0134240   \0   v   J   n   t   _       (   M   C   o   u   n   t   )   -
0134260    1   ,       C   n   t   _       1   7   S   ,  \r  \t  \t   D
0134300    b   l   B   r   a   n   c   h   [   S   r   c   D   s   t   F
0134320    i   n   i   s   h   ,       S   r   c   D   s   t   M   o   r
0134340    e   ,       R   <   0   ]   ,  \r  \t  \t   B   B   A   t   [
0134360    S   r   c   D   s   t   B   o   d   y   L   o   c   ,       2
0134400    ]   ;       *   *   *   *       M   i   c   r   o   D       p
0134420    r   o   b   l   e   m  \r   T   o   p   L   e   v   e   l   ;
0134440   \r  \f  \r   *   -   -   -   -   -   -   -   -   -   -   -   -
0134460    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0134520    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r
0134540    T   o   u   c   h   S   r   c   :  \r   *       T   o   u   c
0134560    h   e   s       e   v   e   r   y       p   a   g   e       o
0134600    f       t   h   e       s   o   u   r   c   e       i   t   e
0134620    m       f   o   r       t   h   i   s       s   c   a   n    
0134640    l   i   n 376 001  \0 355 362   e   .  \r   *       E   n   t
0134660    r   y   :       B   B   S   r   c       =       a   d   d   r
0134700    e   s   s       o   f       f   i   r   s   t       w   o   r
0134720    d       o   f       s   o   u   r   c   e       i   t   e   m
0134740   \r   *  \t   T       =       S   R   a   s   t       =       w
0134760    o   r   d   s       p   e   r       s   o   u   r   c   e    
0135000    s   c   a   n       l   i   n   e   ;       n   e   g   a   t
0135020    i   v   e       =   >       b   o   t   t   o   m   -   t   o
0135040    -   t   o   p  \r   *  \t   S   r   c   I   n   c       =    
0135060    d   i   s   t   a   n   c   e       b   e   t   w   e   e   n
0135100        l   a   s   t       w   o   r   d       o   f       o   n
0135120    e       s   c   a   n       l   i   n   e       a   n   d  \r
0135140    *  \t  \t   f   i   r   s   t       w   o   r   d       o   f
0135160        t   h   e       n   e   x   t   ;       n   e   g   a   t
0135200    i   v   e       =   >       b   o   t   t   o   m   -   t   o
0135220    -   t   o   p  \r   *  \t   M   e   m   B   a   s   e       =
0135240        B   B   S   r   c   B   R 376 001  \0 203 367  \r   *    
0135260    E   x   i   t   :       T       a   n   d       B   B   T   e
0135300    m   p       c   l   o   b   b   e   r   e   d  \r   *       M
0135320    e   t   h   o   d   :       t   o   u   c   h       t   h   e
0135340        l   a   s   t       w   o   r   d   s       o   f       t
0135360    h   e       i   t   e   m   .           I   f       t   h   e
0135400        i   t   e   m       i   s       >   4   0   1   B  \r   *
0135420        w   o   r   d   s       l   o   n   g   ,       a   l   s
0135440    o       t   o   u   c   h       i   n   t   e   r   m   e   d
0135460    i   a   t   e       w   o   r   d   s       a   t       m   u
0135500    l   t   i   p   l   e   s       o   f       4   0   0   B    
0135520    w   o   r   d   s       f   r   o   m  \r   *       t   h   e
0135540        l   a   s   t       w   o   r   d       o   f       t   h
0135560    e       i   t   e   m   .  \r   *       N   o   t   e   :    
0135600    w   e       d   o   n   '   t       a   l   s   o       n   e
0135620    e   d       t   o       t   o   u   c   h       t   h   e    
0135640    f   i   r   s   t       w   o   r   d       o   f 376 001  \0
0135660  314 374       t   h   e       i   t   e   m   ,       s   i   n
0135700    c   e       i   f       a       f   a   u   l   t  \r   *    
0135720    o   c   c   u   r   s       o   n       i   t       d   u   r
0135740    i   n   g       t   h   e       B   i   t   B   l   t       w
0135760    o   r   d       l   o   o   p   ,       n   o   t   h   i   n
0136000    g       w   i   l   l       h   a   v   e       c   h   a   n
0136020    g   e   d       y   e   t   .  \r   *       N   o   t   e   :
0136040        |   S   R   a   s   t   -   S   r   c   I   n   c   |    
0136060    g   i   v   e   s       t   h   e       n   u   m   b   e   r
0136100        o   f       w   o   r   d   s       t   o   u   c   h   e
0136120    d       i   n       t   h   e       i   t   e   m   ;  \r   *
0136140        t   h   e       v   a   l   u   e       i   s       p   o
0136160    s   i   t   i   v   e       i   f       m   o   v   i   n   g
0136200        l   e   f   t   -   t   o   -   r   i   g   h   t   ,    
0136220    n   e   g   a   t   i   v   e       i   f       r   i   g   h
0136240    t   -   t   o   -   l   e   f   t   .  \r   *       T   i   m
0136260    i   n 376 001  \0 234 327   g   :       5       c   y   c   l
0136300    e   s       f   o   r       f   i   r   s   t       p   a   g
0136320    e       o   r       l   e   s   s  \r   *  \t       +   1    
0136340    c   y   c   l   e       i   f       r   i   g   h   t   -   t
0136360    o   -   l   e   f   t  \r   *  \t       +   2       c   y   c
0136400    l   e   s       p   e   r       a   d   d   i   t   i   o   n
0136420    a   l       p   a   g   e  \r   *   -   -   -   -   -   -   -
0136440    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0136520    -   -   -   -  \r   S   u   b   r   o   u   t   i   n   e   ;
0136540   \r  \r  \t   T   _       T   -   (   S   r   c   I   n   c   )
0136560    -   1   ;  \r  \t   B   B   T   e   m   p   _       (   B   B
0136600    S   r   c   )   +   T   ,       D   b   l   B   r   a   n   c
0136620    h   [   S   T   o   u   c   h   R   t   o   L   ,       S   T
0136640    o   u   c   h   L   t   o   R   ,       A   L   U   <   0   ]
0136660    ;  \r  \r   S   T   o   u 376 001  \0 303 214   c   h   L   t
0136700    o   R   :  \r   *       T       h   a   s       (   #       w
0136720    o   r   d   s       i   n       s   o   u   r   c   e       i
0136740    t   e   m   )   -   1   ,       B   B   T   e   m   p       p
0136760    o   i   n   t   s       t   o       l   a   s   t       (   r
0137000    i   g   h   t   m   o   s   t   )       w   o   r   d   .  \r
0137020   \t   T   _       T   -   (   4   0   0   C   )   -   1   ;  \r
0137040   \t   B   B   T   e   m   p   _       (   F   e   t   c   h   _
0137060        B   B   T   e   m   p   )   -   (   4   0   0   C   )   ,
0137100        B   r   a   n   c   h   [   .   +   2   ,       A   L   U
0137120    <   0   ]   ;  \r  \t   T   _       T   -   (   4   0   0   C
0137140    )   ,       B   r   a   n   c   h   [   .   -   1   ]   ;  \r
0137160   \t   R   e   t   u   r   n   ;  \r  \r   S   T   o   u   c   h
0137200    R   t   o   L   :  \r   *       T       h   a   s       -   (
0137220    #       w   o   r   d   s       i   n       s   o   u   r   c
0137240    e       i   t   e   m   )   -   1   ,       B   B   T   e   m
0137260    p       p   o   i   n   t   s       t   o     376 001  \0 342
0137300    ^   l   a   s   t       (   l   e   f   t   m   o   s   t   )
0137320        w   o   r   d       -   2   .  \r  \t   B   B   T   e   m
0137340    p   _       (   B   B   T   e   m   p   )   +   (   2   C   )
0137360    ;  \t  \t   *       F   i   x       t   h   e       o   f   f
0137400    -   b   y   -   2       a   d   d   r   e   s   s  \r  \t   T
0137420    _       T   +   (   4   0   0   C   )   +   1   ;  \t  \t  \t
0137440    *       S   h   o   u   l   d       b   e       T   +   4   0
0137460    2   ,       b   u   t       n   o       m   a   t   t   e   r
0137500   \r  \t   B   B   T   e   m   p   _       (   F   e   t   c   h
0137520    _       B   B   T   e   m   p   )   +   (   4   0   0   C   )
0137540    ,       B   r   a   n   c   h   [   .   +   2   ,       A   L
0137560    U   >   =   0   ]   ;  \r  \t   T   _       T   +   (   4   0
0137600    0   C   )   ,       B   r   a   n   c   h   [   .   -   1   ]
0137620    ;  \r  \t   R   e   t   u   r   n   ;  \r  \f  \r   *   -   -
0137640    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0137700    - 376 001  \0   ]  \t   -   -   -   -   -   -   -   -   -   -
0137720    -   -   -   -   -   -   -   -   -   -   -   -   -   -  \r   T
0137740    o   u   c   h   D   s   t   :  \r   *       T   o   u   c   h
0137760    e   s       e   v   e   r   y       p   a   g   e       o   f
0140000        t   h   e       d   e   s   t   i   n   a   t   i   o   n
0140020        i   t   e   m       f   o   r       t   h   i   s       s
0140040    c   a   n       l   i   n   e   .  \r   *       E   n   t   r
0140060    y   :       B   B   D   s   t       =       a   d   d   r   e
0140100    s   s       o   f       f   i   r   s   t       w   o   r   d
0140120        o   f       d   e   s   t   i   n   a   t   i   o   n    
0140140    i   t   e   m  \r   *  \t   T       =       D   R   a   s   t
0140160        =       w   o   r   d   s       p   e   r       d   e   s
0140200    t   i   n   a   t   i   o   n       s   c   a   n       l   i
0140220    n   e   ;       n   e   g   a   t   i   v   e       =   >    
0140240    b   o   t   t   o   m   -   t   o   -   t   o   p  \r   *  \t
0140260    D   s   t   I   n   c       =       d   i   s   t   a   n   c
0140300    e       b   e   t   w 376 001  \0 021 244   e   e   n       l
0140320    a   s   t       w   o   r   d       o   f       o   n   e    
0140340    s   c   a   n       l   i   n   e       a   n   d  \r   *  \t
0140360   \t   f   i   r   s   t       w   o   r   d       o   f       t
0140400    h   e       n   e   x   t   ;       n   e   g   a   t   i   v
0140420    e       =   >       b   o   t   t   o   m   -   t   o   -   t
0140440    o   p  \r   *  \t   M   e   m   B   a   s   e       =       B
0140460    B   D   s   t   B   R  \r   *       E   x   i   t   :       T
0140500        a   n   d       B   B   T   e   m   p       c   l   o   b
0140520    b   e   r   e   d  \r   *       N   o   t   e   :       m   u
0140540    s   t       d   i   r   t   y       a   n   y       w   o   r
0140560    d   s       t   o   u   c   h   e   d   ,       t   o       f
0140600    o   r   c   e       w   r   i   t   e   -   p   r   o   t   e
0140620    c   t       f   a   u   l   t   .  \r   *       T   i   m   i
0140640    n   g   :       6       c   y   c   l   e   s       f   o   r
0140660        f   i   r   s   t       p   a   g   e       o   r       l
0140700    e   s   s  \r   *  \t       +   1       c 376 001  \0 230 336
0140720    y   c   l   e       i   f       r   i   g   h   t   -   t   o
0140740    -   l   e   f   t  \r   *  \t       +   3       c   y   c   l
0140760    e   s       p   e   r       a   d   d   i   t   i   o   n   a
0141000    l       p   a   g   e  \r   *   -   -   -   -   -   -   -   -
0141020    -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -
*
0141100    -   -   -  \r   S   u   b   r   o   u   t   i   n   e   ;  \r
0141120   \r  \t   T   _       T   -   (   D   s   t   I   n   c   )   -
0141140    1   ;  \r  \t   B   B   T   e   m   p   _       (   B   B   D
0141160    s   t   )   +   T   ,       D   b   l   B   r   a   n   c   h
0141200    [   D   T   o   u   c   h   R   t   o   L   ,       D   T   o
0141220    u   c   h   L   t   o   R   ,       A   L   U   <   0   ]   ;
0141240   \r  \r   D   T   o   u   c   h   L   t   o   R   :  \r   *    
0141260    T       h   a   s       (   #       w   o   r   d   s       i
0141300    n       s   o   u   r   c   e       i   t   e   m   )   -   1
0141320  376 001  \0   P  \f   ,       B   B   T   e   m   p       p   o
0141340    i   n   t   s       t   o       l   a   s   t       (   r   i
0141360    g   h   t   m   o   s   t   )       w   o   r   d   .  \r  \t
0141400    T   _       T   -   (   4   0   0   C   )   -   1   ;  \r   D
0141420    T   o   u   c   h   L   o   o   p   L   t   o   R   :  \r  \t
0141440    F   e   t   c   h   _       B   B   T   e   m   p   ,       P
0141460    D   _       T   ;  \r  \t   T   _       T   -   (   4   0   0
0141500    C   )   ,       B   r   a   n   c   h   [   D   T   o   u   c
0141520