Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Rijndael Encryption (AES) for 3.0/7.0

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rijndael Encryption (AES) for 3.0/7.0

    Code:
    #IF 0
    =====================================================================
                            Rijndael Encryption
    =====================================================================
       
    Rijndael has been selected by the NIST as "the AES [Advanced 
    Encryption Standard] algorithm" and is described in FIPS-197, which is 
    available here: 
     http://csrc.nist.gov/publications/fi...7/fips-197.pdf 
       
    Rijndael is free for any use public or private, commercial or 
    non-commercial.  The authors of Rijndael provide a home page for the 
    algorithm: 
     http://www.esat.kuleuven.ac.be/~rijmen/rijndael/  
       
    The PowerBASIC implementation appearing below, which meets the AES 
    standard for 16-byte block operations, is based in part on java 
    routines written and placed in the public domain by Paulo Barreto. 
       
    The PB implementation is hereby placed in the public domain.  Use it 
    as you wish.  My hope is discourage reliance on home-grown encryption 
    schemes in favor of well-examined, strong, freely available 
    algorithms. 
       
    In this posting, test-bed code appears below the RIJNDAEL.BAS file 
    contents.  All code requires compiler releases 3.0/7.0 or later.
       
       
    Implementation Notes
    -- The algorithm operates on plaintext blocks of 16 bytes.  Encryption 
    of shorter blocks is possible only by padding the plaintext (often  
    with zero bytes), which can be accomplished through several methods.  
    The simplest of them assumes that the final byte of plaintext always 
    identifies the number of bytes of padding added, including the final 
    byte itself. 
       
    Examples: 
       
       total plaintext bytes         = 30
       plaintext blocks encrypted:   = 2
       final block                   = chr$(x1 to x14) + chr$(0,2)
       
       total plaintext bytes         = 40
       plaintext blocks encrypted:   = 3
       final block                   = chr$(x1 to x8) + chr$(0,0,0,0,0,0,0,8)
       
    -- Encryption key lengths can range from 1 to 32 bytes (8 to 256
    bits).  
       
    -- Implementation here is handled through an #INCLUDE file.  No global 
    data is employed.  
       
    -- As presented, the code does not supply a ready-to-use encryption 
    application.  It offers necessary pieces only, as well as an 
    illustration of their use.  Always keep in mind that most encryption 
    is broken because of implementation flaws and weaknesses. 
       
    -- Like most encryption algorithms, Rijndael was designed on 
    big-endian systems.  For this reason, little-endian systems return 
    correct test vector results only through considerable byte-swapping, 
    with efficiency suffering as a result.  Because it adds nothing to the 
    encryption security, an efficient implementation should avoid the 
    byte-swapping.  Here the equate %VERIFY_IMPLEMENTATION can be remmed 
    to avoid this byte-swapping. 
       
    -- Because of the methods of data handling required for most 
    encryption and hashing, PowerBASIC's LONGs should be used to assure  
    correct bit-level results (as well as additional speed). 
       
    Greg Turgeon 08/2002
       
    Revised 04/2005
       
    -- Hard-coded table data for FUNCTION Rijndael_Init&() to make possible 
       avoiding static variables
       
       
    #ENDIF
       
    '-- Rem this equate for any use other than verification of implementation.
    %VERIFY_IMPLEMENTATION = 1
       
    DEFLNG A-Z
       
    %MAX_ROUNDS    = 14
    %MIN_ROUNDS    = 10
       
    %BLOCKSIZE     = 16
    %SUBKEY_SIZE   = (%BLOCKSIZE*2*8)   '256
    %MAX_KEY_BYTES = (%BLOCKSIZE*2)
       
    %ENCRYPT       = 1
    %DECRYPT       = 2
       
    TYPE ENCRYPTION_CONTEXT
       Action        AS LONG
       Rounds        AS LONG
       UserKeyLength AS LONG
       UserKey       AS LONG PTR
       InBlock       AS LONG PTR
       OutBlock      AS LONG PTR
       KeyBlocks     AS LONG                  '4*4-byte blocks
       KE            AS LONG PTR              '<-- pointer to encryption subkey buffer
       KE_Buffer     AS STRING * %SUBKEY_SIZE '<-- encryption subkey buffer
       KD            AS LONG PTR              '<-- pointer to decryption subkey buffer
       KD_Buffer     AS STRING * %SUBKEY_SIZE '<-- decryption subkey buffer
       Se            AS BYTE PTR
       Sd            AS BYTE PTR
       Te0           AS LONG PTR
       Te1           AS LONG PTR
       Te2           AS LONG PTR   
       Te3           AS LONG PTR
       Td0           AS LONG PTR
       Td1           AS LONG PTR
       Td2           AS LONG PTR   
       Td3           AS LONG PTR
       Rcon          AS LONG PTR
    END TYPE
       
       
    '--------------------
    '-- Utility macros
    '--------------------
    MACRO zbs(xx)=string$(xx,0)
       
    '--------------------
    MACRO FUNCTION shiftlc(xx,constant_shiftval)
    retval = (xx)
    !  shl   retval, constant_shiftval
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION shiftrc(xx,constant_shiftval)
    retval = (xx)
    !  shr   retval, constant_shiftval
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION byte3(xx)
    retval = (xx)
    !  mov   eax, retval
    !  shr   eax, 24
    !  mov   retval, eax
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION byte2(xx)
    retval = (xx)
    !  mov   eax, retval
    !  shr   eax, 16
    !  and   eax, &hff
    !  mov   retval, eax
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION byte1(xx)
    retval = (xx)
    !  mov   eax, retval
    !  shr   eax, 8
    !  and   eax, &hff
    !  mov   retval, eax
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION byte0(xx)
    retval = (xx)
    !  mov   eax, retval
    !  and   eax, &hff
    !  mov   retval, eax
    END MACRO = retval
       
    '--------------------
    MACRO FUNCTION get_block(mem_ptr)
    !  mov   edx, mem_ptr
    !  mov   eax, [edx]
    #IF %def(%VERIFY_IMPLEMENTATION)
    !  bswap eax
    #ENDIF
    !  mov   retval, eax
    !  add   edx, 4
    !  mov   mem_ptr, edx
    END MACRO = retval
       
    '--------------------
    MACRO put_block(mem_ptr,value)
    retval=value
    !  mov   edx, retval
    #IF %def(%VERIFY_IMPLEMENTATION)
    !  bswap edx
    #ENDIF
    !  mov   eax, mem_ptr
    !  mov   [eax], edx
    !  add   eax, 4
    !  mov   mem_ptr, eax
    END MACRO
       
       
    DECLARE FUNCTION Rijndael_Init&(Ctx AS ENCRYPTION_CONTEXT)
    DECLARE FUNCTION Set_Key&(Ctx AS ENCRYPTION_CONTEXT)
    DECLARE FUNCTION MakeDecryptKeySchedule(Ctx AS ENCRYPTION_CONTEXT)
    DECLARE FUNCTION EncryptBlock&(Ctx AS ENCRYPTION_CONTEXT)
    DECLARE FUNCTION DecryptBlock&(Ctx AS ENCRYPTION_CONTEXT)
       
    '====================
    FUNCTION Set_Key&(Ctx AS ENCRYPTION_CONTEXT)
    LOCAL i&, n&, nk&, pblock&, r&, temp&, t&, u&, v&, retval&
    LOCAL in_ukey$, in_key AS LONG PTR, k AS LONG PTR, s AS BYTE PTR
       
    select case as long Ctx.UserKeyLength
       case 16
          Ctx.Rounds = 10
       case 24
          Ctx.Rounds = 12
       case 32
          Ctx.Rounds = 14
       case else
          function = 0
          exit function
    end select
       
    Ctx.KeyBlocks = (Ctx.Rounds+1)*4
    Rijndael_Init Ctx
       
    in_ukey$ = zbs(%MAX_KEY_BYTES)
    in_key = strptr(in_ukey$)
       
    pblock = Ctx.UserKey
    k = Ctx.KE  'local copy
    for i = 0 to (Ctx.Rounds-6)-1
       @k[i] = get_block(pblock)
    next i
       
    s = Ctx.Se
    i = Ctx.Rounds - 6 : nk = i : n = 0
    do while i < Ctx.KeyBlocks
       temp = @k[i-1]
       if n = 0 then
          n = Nk
          t = byte2(temp)
          v = shiftlc(@s[t],24)
          t = byte1(temp) : u = shiftlc(@s[t],16)
          v = v OR u
          t = byte0(temp) : u = shiftlc(@s[t],8)
          v = v OR u
          u = @s[byte3(temp)]
          temp = (v OR u) XOR [email protected][r] : incr r
       else
          if ((Nk = 8) AND (n = 4)) then
             t = byte3(temp)
             v = shiftlc(@s[t],24)
             t = byte2(temp) : u = shiftlc(@s[t],16)
             v = v OR u
             t = byte1(temp) : u = shiftlc(@s[t],8)
             v = v OR u
             u = @s[temp AND &hff]
             temp = v OR u
          end if
       end if
       @k[i] = @k[i-nk] XOR temp
       incr i : decr n
    loop
       
    if Ctx.Action = %DECRYPT then MakeDecryptKeySchedule Ctx
    function = -1
    END FUNCTION
       
       
    '--------------------
    MACRO FUNCTION imix(tt)
    u =       [email protected][[email protected][byte3(tt)]]
    u = u XOR [email protected][[email protected][byte2(tt)]]
    u = u XOR [email protected][[email protected][byte1(tt)]]
    u = u XOR [email protected][[email protected][tt AND &hff]]
    END MACRO = u
       
    '====================
    FUNCTION MakeDecryptKeySchedule(Ctx AS ENCRYPTION_CONTEXT)
    LOCAL d&, e&, i&, retval&, t&, u&, k AS LONG PTR
       
    k = Ctx.KD
    d = 0 : e = Ctx.Rounds*4
       
    @k[d]   = [email protected][e]   : @k[d+1] = [email protected][e+1]
    @k[d+2] = [email protected][e+2] : @k[d+3] = [email protected][e+3]
       
    d = d + 4 : e = e - 4
    for i = 1 to Ctx.Rounds-1
       t = [email protected][e]   : @k[d]   = imix(t)
       t = [email protected][e+1] : @k[d+1] = imix(t)
       t = [email protected][e+2] : @k[d+2] = imix(t)
       t = [email protected][e+3] : @k[d+3] = imix(t)
       d = d + 4 : e = e - 4
    next i
       
    @k[d]   = [email protected][e]   : @k[d+1] = [email protected][e+1]
    @k[d+2] = [email protected][e+2] : @k[d+3] = [email protected][e+3]
    END FUNCTION
       
       
    '--------------------
    MACRO FUNCTION packbytes(aa,bb,cc,dd)
    aa = shiftlc(aa,24)
    bb = shiftlc(bb,16)
    cc = shiftlc(cc,8)
    END MACRO = (aa OR bb OR cc OR dd)
       
    '--------------------
    MACRO FUNCTION enc_ta(aa,bb,cc,dd)
    u =       [email protected][byte3(aa)]
    u = u XOR [email protected][byte2(bb)]
    u = u XOR [email protected][byte1(cc)]
    u = u XOR [email protected][dd AND &hff]
    END MACRO = u
       
    '--------------------
    MACRO FUNCTION enc_tal(aa,bb,cc,dd,ww)
    u = [email protected][byte3(aa)] : v = shiftrc(ww,24)
    a0 = u XOR v
    u = [email protected][byte2(bb)] : v = shiftrc(ww,16)
    a1 = (u XOR v) AND &hff
    u = [email protected][byte1(cc)] : v = shiftrc(ww,8)
    a2 = (u XOR v) AND &hff
    u = [email protected][dd AND &hff] : v = ww
    a3 = (u XOR v) AND &hff
    retval = packbytes(a0,a1,a2,a3)
    END MACRO = retval
       
    '====================
    FUNCTION EncryptBlock&(Ctx AS ENCRYPTION_CONTEXT)
    LOCAL r&, t&, u&, v&, w&, pblock&, retval&, k AS LONG PTR
    LOCAL a0&, a1&, a2&, a3&, t0&, t1&, t2&, t3&, s0&, s1&, s2&, s3& 
       
    pblock = Ctx.InBlock
    t0 = get_block(pblock) : t1 = get_block(pblock)
    t2 = get_block(pblock) : t3 = get_block(pblock)
       
    k = Ctx.KE
    t0 = t0 XOR @k[0] : t1 = t1 XOR @k[1]
    t2 = t2 XOR @k[2] : t3 = t3 XOR @k[3]
    for r = 1 to Ctx.Rounds-1
       k = k + (4*4)
       t = enc_ta(t0,t1,t2,t3) : a0 = t XOR @k[0]
       t = enc_ta(t1,t2,t3,t0) : a1 = t XOR @k[1]
       t = enc_ta(t2,t3,t0,t1) : a2 = t XOR @k[2]
       t = enc_ta(t3,t0,t1,t2) : a3 = t XOR @k[3]
       
       t0 = a0 : t1 = a1 : t2 = a2 : t3 = a3
    next r
    k = k + (4*4)
    w = @k[0] : s0 = enc_tal(t0,t1,t2,t3,w)
    w = @k[1] : s1 = enc_tal(t1,t2,t3,t0,w)
    w = @k[2] : s2 = enc_tal(t2,t3,t0,t1,w)
    w = @k[3] : s3 = enc_tal(t3,t0,t1,t2,w)
       
    pblock = Ctx.OutBlock
    put_block(pblock,s0) : put_block(pblock,s1)
    put_block(pblock,s2) : put_block(pblock,s3)
    END FUNCTION
       
       
    '--------------------
    MACRO FUNCTION dec_ta(aa,bb,cc,dd)
    u =       [email protected][byte3(aa)]
    u = u XOR [email protected][byte2(bb)]
    u = u XOR [email protected][byte1(cc)]
    u = u XOR [email protected][dd AND &hff]
    END MACRO = u
       
    '--------------------
    MACRO FUNCTION dec_tal(aa,bb,cc,dd,ww)
    u = [email protected][byte3(aa)] : v = shiftrc(ww,24)
    a0 = u XOR v
    u = [email protected][byte2(bb)] : v = shiftrc(ww,16)
    a1 = (u XOR v) AND &hff
    u = [email protected][byte1(cc)] : v = shiftrc(ww,8)
    a2 = (u XOR v) AND &hff
    u = [email protected][dd AND &hff] : v = ww
    a3 = (u XOR v) AND &hff
    retval = packbytes(a0,a1,a2,a3)
    END MACRO = retval
       
    '====================
    FUNCTION DecryptBlock&(Ctx AS ENCRYPTION_CONTEXT)
    LOCAL r&, t&, u&, v&, w&, pblock&, retval&, k AS LONG PTR
    LOCAL a0&, a1&, a2&, a3&, t0&, t1&, t2&, t3&, s0&, s1&, s2&, s3& 
       
    pblock = Ctx.InBlock
    t0 = get_block(pblock) : t1 = get_block(pblock)
    t2 = get_block(pblock) : t3 = get_block(pblock)
       
    k = Ctx.KD
    t0 = t0 XOR @k[0] : t1 = t1 XOR @k[1]
    t2 = t2 XOR @k[2] : t3 = t3 XOR @k[3]
       
    for  r = 1 to Ctx.Rounds-1
       k = k + (4*4)
       t = dec_ta(t0,t3,t2,t1) : a0 = t XOR @k[0]
       t = dec_ta(t1,t0,t3,t2) : a1 = t XOR @k[1]
       t = dec_ta(t2,t1,t0,t3) : a2 = t XOR @k[2]
       t = dec_ta(t3,t2,t1,t0) : a3 = t XOR @k[3]
       t0 = a0 : t1 = a1 : t2 = a2 : t3 = a3
    next r
    k = k + (4*4)
    w = @k[0] : s0 = dec_tal(t0,t3,t2,t1,w)
    w = @k[1] : s1 = dec_tal(t1,t0,t3,t2,w)
    w = @k[2] : s2 = dec_tal(t2,t1,t0,t3,w)
    w = @k[3] : s3 = dec_tal(t3,t2,t1,t0,w)
       
    pblock = Ctx.OutBlock
    put_block(pblock,s0) : put_block(pblock,s1)
    put_block(pblock,s2) : put_block(pblock,s3)
    END FUNCTION
       
    '====================
    FUNCTION Rijndael_Init&(Ctx AS ENCRYPTION_CONTEXT)
    LOCAL te0&
       
    Ctx.KE_Buffer  = zbs(%SUBKEY_SIZE)
    Ctx.KE         = varptr(Ctx.KE_Buffer)
    Ctx.KD_Buffer  = zbs(%SUBKEY_SIZE)
    Ctx.KD         = varptr(Ctx.KD_Buffer)
       
    te0 = codeptr(Table_Data)
       
    Ctx.Te0       = te0
    Ctx.Te1       = te0+(1024)
    Ctx.Te2       = te0+(1024*2)
    Ctx.Te3       = te0+(1024*3)
    Ctx.Td0       = te0+(1024*4)
    Ctx.Td1       = te0+(1024*5)
    Ctx.Td2       = te0+(1024*6)
    Ctx.Td3       = te0+(1024*7)
    Ctx.Se        = te0+(1024*8)
    Ctx.Sd        = Ctx.Se+(256)
    Ctx.Rcon      = Ctx.Se+(256*2)
    exit function
       
    '============
    Table_Data:
    ! DB &hA5,&h63,&h63,&hC6,&h84,&h7C,&h7C,&hF8,&h99,&h77,&h77,&hEE,&h8D,&h7B,&h7B,&hF6
    ! DB &h0D,&hF2,&hF2,&hFF,&hBD,&h6B,&h6B,&hD6,&hB1,&h6F,&h6F,&hDE,&h54,&hC5,&hC5,&h91
    ! DB &h50,&h30,&h30,&h60,&h03,&h01,&h01,&h02,&hA9,&h67,&h67,&hCE,&h7D,&h2B,&h2B,&h56
    ! DB &h19,&hFE,&hFE,&hE7,&h62,&hD7,&hD7,&hB5,&hE6,&hAB,&hAB,&h4D,&h9A,&h76,&h76,&hEC
    ! DB &h45,&hCA,&hCA,&h8F,&h9D,&h82,&h82,&h1F,&h40,&hC9,&hC9,&h89,&h87,&h7D,&h7D,&hFA
    ! DB &h15,&hFA,&hFA,&hEF,&hEB,&h59,&h59,&hB2,&hC9,&h47,&h47,&h8E,&h0B,&hF0,&hF0,&hFB
    ! DB &hEC,&hAD,&hAD,&h41,&h67,&hD4,&hD4,&hB3,&hFD,&hA2,&hA2,&h5F,&hEA,&hAF,&hAF,&h45
    ! DB &hBF,&h9C,&h9C,&h23,&hF7,&hA4,&hA4,&h53,&h96,&h72,&h72,&hE4,&h5B,&hC0,&hC0,&h9B
    ! DB &hC2,&hB7,&hB7,&h75,&h1C,&hFD,&hFD,&hE1,&hAE,&h93,&h93,&h3D,&h6A,&h26,&h26,&h4C
    ! DB &h5A,&h36,&h36,&h6C,&h41,&h3F,&h3F,&h7E,&h02,&hF7,&hF7,&hF5,&h4F,&hCC,&hCC,&h83
    ! DB &h5C,&h34,&h34,&h68,&hF4,&hA5,&hA5,&h51,&h34,&hE5,&hE5,&hD1,&h08,&hF1,&hF1,&hF9
    ! DB &h93,&h71,&h71,&hE2,&h73,&hD8,&hD8,&hAB,&h53,&h31,&h31,&h62,&h3F,&h15,&h15,&h2A
    ! DB &h0C,&h04,&h04,&h08,&h52,&hC7,&hC7,&h95,&h65,&h23,&h23,&h46,&h5E,&hC3,&hC3,&h9D
    ! DB &h28,&h18,&h18,&h30,&hA1,&h96,&h96,&h37,&h0F,&h05,&h05,&h0A,&hB5,&h9A,&h9A,&h2F
    ! DB &h09,&h07,&h07,&h0E,&h36,&h12,&h12,&h24,&h9B,&h80,&h80,&h1B,&h3D,&hE2,&hE2,&hDF
    ! DB &h26,&hEB,&hEB,&hCD,&h69,&h27,&h27,&h4E,&hCD,&hB2,&hB2,&h7F,&h9F,&h75,&h75,&hEA
    ! DB &h1B,&h09,&h09,&h12,&h9E,&h83,&h83,&h1D,&h74,&h2C,&h2C,&h58,&h2E,&h1A,&h1A,&h34
    ! DB &h2D,&h1B,&h1B,&h36,&hB2,&h6E,&h6E,&hDC,&hEE,&h5A,&h5A,&hB4,&hFB,&hA0,&hA0,&h5B
    ! DB &hF6,&h52,&h52,&hA4,&h4D,&h3B,&h3B,&h76,&h61,&hD6,&hD6,&hB7,&hCE,&hB3,&hB3,&h7D
    ! DB &h7B,&h29,&h29,&h52,&h3E,&hE3,&hE3,&hDD,&h71,&h2F,&h2F,&h5E,&h97,&h84,&h84,&h13
    ! DB &hF5,&h53,&h53,&hA6,&h68,&hD1,&hD1,&hB9,&h00,&h00,&h00,&h00,&h2C,&hED,&hED,&hC1
    ! DB &h60,&h20,&h20,&h40,&h1F,&hFC,&hFC,&hE3,&hC8,&hB1,&hB1,&h79,&hED,&h5B,&h5B,&hB6
    ! DB &hBE,&h6A,&h6A,&hD4,&h46,&hCB,&hCB,&h8D,&hD9,&hBE,&hBE,&h67,&h4B,&h39,&h39,&h72
    ! DB &hDE,&h4A,&h4A,&h94,&hD4,&h4C,&h4C,&h98,&hE8,&h58,&h58,&hB0,&h4A,&hCF,&hCF,&h85
    ! DB &h6B,&hD0,&hD0,&hBB,&h2A,&hEF,&hEF,&hC5,&hE5,&hAA,&hAA,&h4F,&h16,&hFB,&hFB,&hED
    ! DB &hC5,&h43,&h43,&h86,&hD7,&h4D,&h4D,&h9A,&h55,&h33,&h33,&h66,&h94,&h85,&h85,&h11
    ! DB &hCF,&h45,&h45,&h8A,&h10,&hF9,&hF9,&hE9,&h06,&h02,&h02,&h04,&h81,&h7F,&h7F,&hFE
    ! DB &hF0,&h50,&h50,&hA0,&h44,&h3C,&h3C,&h78,&hBA,&h9F,&h9F,&h25,&hE3,&hA8,&hA8,&h4B
    ! DB &hF3,&h51,&h51,&hA2,&hFE,&hA3,&hA3,&h5D,&hC0,&h40,&h40,&h80,&h8A,&h8F,&h8F,&h05
    ! DB &hAD,&h92,&h92,&h3F,&hBC,&h9D,&h9D,&h21,&h48,&h38,&h38,&h70,&h04,&hF5,&hF5,&hF1
    ! DB &hDF,&hBC,&hBC,&h63,&hC1,&hB6,&hB6,&h77,&h75,&hDA,&hDA,&hAF,&h63,&h21,&h21,&h42
    ! DB &h30,&h10,&h10,&h20,&h1A,&hFF,&hFF,&hE5,&h0E,&hF3,&hF3,&hFD,&h6D,&hD2,&hD2,&hBF
    ! DB &h4C,&hCD,&hCD,&h81,&h14,&h0C,&h0C,&h18,&h35,&h13,&h13,&h26,&h2F,&hEC,&hEC,&hC3
    ! DB &hE1,&h5F,&h5F,&hBE,&hA2,&h97,&h97,&h35,&hCC,&h44,&h44,&h88,&h39,&h17,&h17,&h2E
    ! DB &h57,&hC4,&hC4,&h93,&hF2,&hA7,&hA7,&h55,&h82,&h7E,&h7E,&hFC,&h47,&h3D,&h3D,&h7A
    ! DB &hAC,&h64,&h64,&hC8,&hE7,&h5D,&h5D,&hBA,&h2B,&h19,&h19,&h32,&h95,&h73,&h73,&hE6
    ! DB &hA0,&h60,&h60,&hC0,&h98,&h81,&h81,&h19,&hD1,&h4F,&h4F,&h9E,&h7F,&hDC,&hDC,&hA3
    ! DB &h66,&h22,&h22,&h44,&h7E,&h2A,&h2A,&h54,&hAB,&h90,&h90,&h3B,&h83,&h88,&h88,&h0B
    ! DB &hCA,&h46,&h46,&h8C,&h29,&hEE,&hEE,&hC7,&hD3,&hB8,&hB8,&h6B,&h3C,&h14,&h14,&h28
    ! DB &h79,&hDE,&hDE,&hA7,&hE2,&h5E,&h5E,&hBC,&h1D,&h0B,&h0B,&h16,&h76,&hDB,&hDB,&hAD
    ! DB &h3B,&hE0,&hE0,&hDB,&h56,&h32,&h32,&h64,&h4E,&h3A,&h3A,&h74,&h1E,&h0A,&h0A,&h14
    ! DB &hDB,&h49,&h49,&h92,&h0A,&h06,&h06,&h0C,&h6C,&h24,&h24,&h48,&hE4,&h5C,&h5C,&hB8
    ! DB &h5D,&hC2,&hC2,&h9F,&h6E,&hD3,&hD3,&hBD,&hEF,&hAC,&hAC,&h43,&hA6,&h62,&h62,&hC4
    ! DB &hA8,&h91,&h91,&h39,&hA4,&h95,&h95,&h31,&h37,&hE4,&hE4,&hD3,&h8B,&h79,&h79,&hF2
    ! DB &h32,&hE7,&hE7,&hD5,&h43,&hC8,&hC8,&h8B,&h59,&h37,&h37,&h6E,&hB7,&h6D,&h6D,&hDA
    ! DB &h8C,&h8D,&h8D,&h01,&h64,&hD5,&hD5,&hB1,&hD2,&h4E,&h4E,&h9C,&hE0,&hA9,&hA9,&h49
    ! DB &hB4,&h6C,&h6C,&hD8,&hFA,&h56,&h56,&hAC,&h07,&hF4,&hF4,&hF3,&h25,&hEA,&hEA,&hCF
    ! DB &hAF,&h65,&h65,&hCA,&h8E,&h7A,&h7A,&hF4,&hE9,&hAE,&hAE,&h47,&h18,&h08,&h08,&h10
    ! DB &hD5,&hBA,&hBA,&h6F,&h88,&h78,&h78,&hF0,&h6F,&h25,&h25,&h4A,&h72,&h2E,&h2E,&h5C
    ! DB &h24,&h1C,&h1C,&h38,&hF1,&hA6,&hA6,&h57,&hC7,&hB4,&hB4,&h73,&h51,&hC6,&hC6,&h97
    ! DB &h23,&hE8,&hE8,&hCB,&h7C,&hDD,&hDD,&hA1,&h9C,&h74,&h74,&hE8,&h21,&h1F,&h1F,&h3E
    ! DB &hDD,&h4B,&h4B,&h96,&hDC,&hBD,&hBD,&h61,&h86,&h8B,&h8B,&h0D,&h85,&h8A,&h8A,&h0F
    ! DB &h90,&h70,&h70,&hE0,&h42,&h3E,&h3E,&h7C,&hC4,&hB5,&hB5,&h71,&hAA,&h66,&h66,&hCC
    ! DB &hD8,&h48,&h48,&h90,&h05,&h03,&h03,&h06,&h01,&hF6,&hF6,&hF7,&h12,&h0E,&h0E,&h1C
    ! DB &hA3,&h61,&h61,&hC2,&h5F,&h35,&h35,&h6A,&hF9,&h57,&h57,&hAE,&hD0,&hB9,&hB9,&h69
    ! DB &h91,&h86,&h86,&h17,&h58,&hC1,&hC1,&h99,&h27,&h1D,&h1D,&h3A,&hB9,&h9E,&h9E,&h27
    ! DB &h38,&hE1,&hE1,&hD9,&h13,&hF8,&hF8,&hEB,&hB3,&h98,&h98,&h2B,&h33,&h11,&h11,&h22
    ! DB &hBB,&h69,&h69,&hD2,&h70,&hD9,&hD9,&hA9,&h89,&h8E,&h8E,&h07,&hA7,&h94,&h94,&h33
    ! DB &hB6,&h9B,&h9B,&h2D,&h22,&h1E,&h1E,&h3C,&h92,&h87,&h87,&h15,&h20,&hE9,&hE9,&hC9
    ! DB &h49,&hCE,&hCE,&h87,&hFF,&h55,&h55,&hAA,&h78,&h28,&h28,&h50,&h7A,&hDF,&hDF,&hA5
    ! DB &h8F,&h8C,&h8C,&h03,&hF8,&hA1,&hA1,&h59,&h80,&h89,&h89,&h09,&h17,&h0D,&h0D,&h1A
    ! DB &hDA,&hBF,&hBF,&h65,&h31,&hE6,&hE6,&hD7,&hC6,&h42,&h42,&h84,&hB8,&h68,&h68,&hD0
    ! DB &hC3,&h41,&h41,&h82,&hB0,&h99,&h99,&h29,&h77,&h2D,&h2D,&h5A,&h11,&h0F,&h0F,&h1E
    ! DB &hCB,&hB0,&hB0,&h7B,&hFC,&h54,&h54,&hA8,&hD6,&hBB,&hBB,&h6D,&h3A,&h16,&h16,&h2C
    ! DB &h63,&h63,&hC6,&hA5,&h7C,&h7C,&hF8,&h84,&h77,&h77,&hEE,&h99,&h7B,&h7B,&hF6,&h8D
    ! DB &hF2,&hF2,&hFF,&h0D,&h6B,&h6B,&hD6,&hBD,&h6F,&h6F,&hDE,&hB1,&hC5,&hC5,&h91,&h54
    ! DB &h30,&h30,&h60,&h50,&h01,&h01,&h02,&h03,&h67,&h67,&hCE,&hA9,&h2B,&h2B,&h56,&h7D
    ! DB &hFE,&hFE,&hE7,&h19,&hD7,&hD7,&hB5,&h62,&hAB,&hAB,&h4D,&hE6,&h76,&h76,&hEC,&h9A
    ! DB &hCA,&hCA,&h8F,&h45,&h82,&h82,&h1F,&h9D,&hC9,&hC9,&h89,&h40,&h7D,&h7D,&hFA,&h87
    ! DB &hFA,&hFA,&hEF,&h15,&h59,&h59,&hB2,&hEB,&h47,&h47,&h8E,&hC9,&hF0,&hF0,&hFB,&h0B
    ! DB &hAD,&hAD,&h41,&hEC,&hD4,&hD4,&hB3,&h67,&hA2,&hA2,&h5F,&hFD,&hAF,&hAF,&h45,&hEA
    ! DB &h9C,&h9C,&h23,&hBF,&hA4,&hA4,&h53,&hF7,&h72,&h72,&hE4,&h96,&hC0,&hC0,&h9B,&h5B
    ! DB &hB7,&hB7,&h75,&hC2,&hFD,&hFD,&hE1,&h1C,&h93,&h93,&h3D,&hAE,&h26,&h26,&h4C,&h6A
    ! DB &h36,&h36,&h6C,&h5A,&h3F,&h3F,&h7E,&h41,&hF7,&hF7,&hF5,&h02,&hCC,&hCC,&h83,&h4F
    ! DB &h34,&h34,&h68,&h5C,&hA5,&hA5,&h51,&hF4,&hE5,&hE5,&hD1,&h34,&hF1,&hF1,&hF9,&h08
    ! DB &h71,&h71,&hE2,&h93,&hD8,&hD8,&hAB,&h73,&h31,&h31,&h62,&h53,&h15,&h15,&h2A,&h3F
    ! DB &h04,&h04,&h08,&h0C,&hC7,&hC7,&h95,&h52,&h23,&h23,&h46,&h65,&hC3,&hC3,&h9D,&h5E
    ! DB &h18,&h18,&h30,&h28,&h96,&h96,&h37,&hA1,&h05,&h05,&h0A,&h0F,&h9A,&h9A,&h2F,&hB5
    ! DB &h07,&h07,&h0E,&h09,&h12,&h12,&h24,&h36,&h80,&h80,&h1B,&h9B,&hE2,&hE2,&hDF,&h3D
    ! DB &hEB,&hEB,&hCD,&h26,&h27,&h27,&h4E,&h69,&hB2,&hB2,&h7F,&hCD,&h75,&h75,&hEA,&h9F
    ! DB &h09,&h09,&h12,&h1B,&h83,&h83,&h1D,&h9E,&h2C,&h2C,&h58,&h74,&h1A,&h1A,&h34,&h2E
    ! DB &h1B,&h1B,&h36,&h2D,&h6E,&h6E,&hDC,&hB2,&h5A,&h5A,&hB4,&hEE,&hA0,&hA0,&h5B,&hFB
    ! DB &h52,&h52,&hA4,&hF6,&h3B,&h3B,&h76,&h4D,&hD6,&hD6,&hB7,&h61,&hB3,&hB3,&h7D,&hCE
    ! DB &h29,&h29,&h52,&h7B,&hE3,&hE3,&hDD,&h3E,&h2F,&h2F,&h5E,&h71,&h84,&h84,&h13,&h97
    ! DB &h53,&h53,&hA6,&hF5,&hD1,&hD1,&hB9,&h68,&h00,&h00,&h00,&h00,&hED,&hED,&hC1,&h2C
    ! DB &h20,&h20,&h40,&h60,&hFC,&hFC,&hE3,&h1F,&hB1,&hB1,&h79,&hC8,&h5B,&h5B,&hB6,&hED
    ! DB &h6A,&h6A,&hD4,&hBE,&hCB,&hCB,&h8D,&h46,&hBE,&hBE,&h67,&hD9,&h39,&h39,&h72,&h4B
    ! DB &h4A,&h4A,&h94,&hDE,&h4C,&h4C,&h98,&hD4,&h58,&h58,&hB0,&hE8,&hCF,&hCF,&h85,&h4A
    ! DB &hD0,&hD0,&hBB,&h6B,&hEF,&hEF,&hC5,&h2A,&hAA,&hAA,&h4F,&hE5,&hFB,&hFB,&hED,&h16
    ! DB &h43,&h43,&h86,&hC5,&h4D,&h4D,&h9A,&hD7,&h33,&h33,&h66,&h55,&h85,&h85,&h11,&h94
    ! DB &h45,&h45,&h8A,&hCF,&hF9,&hF9,&hE9,&h10,&h02,&h02,&h04,&h06,&h7F,&h7F,&hFE,&h81
    ! DB &h50,&h50,&hA0,&hF0,&h3C,&h3C,&h78,&h44,&h9F,&h9F,&h25,&hBA,&hA8,&hA8,&h4B,&hE3
    ! DB &h51,&h51,&hA2,&hF3,&hA3,&hA3,&h5D,&hFE,&h40,&h40,&h80,&hC0,&h8F,&h8F,&h05,&h8A
    ! DB &h92,&h92,&h3F,&hAD,&h9D,&h9D,&h21,&hBC,&h38,&h38,&h70,&h48,&hF5,&hF5,&hF1,&h04
    ! DB &hBC,&hBC,&h63,&hDF,&hB6,&hB6,&h77,&hC1,&hDA,&hDA,&hAF,&h75,&h21,&h21,&h42,&h63
    ! DB &h10,&h10,&h20,&h30,&hFF,&hFF,&hE5,&h1A,&hF3,&hF3,&hFD,&h0E,&hD2,&hD2,&hBF,&h6D
    ! DB &hCD,&hCD,&h81,&h4C,&h0C,&h0C,&h18,&h14,&h13,&h13,&h26,&h35,&hEC,&hEC,&hC3,&h2F
    ! DB &h5F,&h5F,&hBE,&hE1,&h97,&h97,&h35,&hA2,&h44,&h44,&h88,&hCC,&h17,&h17,&h2E,&h39
    ! DB &hC4,&hC4,&h93,&h57,&hA7,&hA7,&h55,&hF2,&h7E,&h7E,&hFC,&h82,&h3D,&h3D,&h7A,&h47
    ! DB &h64,&h64,&hC8,&hAC,&h5D,&h5D,&hBA,&hE7,&h19,&h19,&h32,&h2B,&h73,&h73,&hE6,&h95
    ! DB &h60,&h60,&hC0,&hA0,&h81,&h81,&h19,&h98,&h4F,&h4F,&h9E,&hD1,&hDC,&hDC,&hA3,&h7F
    ! DB &h22,&h22,&h44,&h66,&h2A,&h2A,&h54,&h7E,&h90,&h90,&h3B,&hAB,&h88,&h88,&h0B,&h83
    ! DB &h46,&h46,&h8C,&hCA,&hEE,&hEE,&hC7,&h29,&hB8,&hB8,&h6B,&hD3,&h14,&h14,&h28,&h3C
    ! DB &hDE,&hDE,&hA7,&h79,&h5E,&h5E,&hBC,&hE2,&h0B,&h0B,&h16,&h1D,&hDB,&hDB,&hAD,&h76
    ! DB &hE0,&hE0,&hDB,&h3B,&h32,&h32,&h64,&h56,&h3A,&h3A,&h74,&h4E,&h0A,&h0A,&h14,&h1E
    ! DB &h49,&h49,&h92,&hDB,&h06,&h06,&h0C,&h0A,&h24,&h24,&h48,&h6C,&h5C,&h5C,&hB8,&hE4
    ! DB &hC2,&hC2,&h9F,&h5D,&hD3,&hD3,&hBD,&h6E,&hAC,&hAC,&h43,&hEF,&h62,&h62,&hC4,&hA6
    ! DB &h91,&h91,&h39,&hA8,&h95,&h95,&h31,&hA4,&hE4,&hE4,&hD3,&h37,&h79,&h79,&hF2,&h8B
    ! DB &hE7,&hE7,&hD5,&h32,&hC8,&hC8,&h8B,&h43,&h37,&h37,&h6E,&h59,&h6D,&h6D,&hDA,&hB7
    ! DB &h8D,&h8D,&h01,&h8C,&hD5,&hD5,&hB1,&h64,&h4E,&h4E,&h9C,&hD2,&hA9,&hA9,&h49,&hE0
    ! DB &h6C,&h6C,&hD8,&hB4,&h56,&h56,&hAC,&hFA,&hF4,&hF4,&hF3,&h07,&hEA,&hEA,&hCF,&h25
    ! DB &h65,&h65,&hCA,&hAF,&h7A,&h7A,&hF4,&h8E,&hAE,&hAE,&h47,&hE9,&h08,&h08,&h10,&h18
    ! DB &hBA,&hBA,&h6F,&hD5,&h78,&h78,&hF0,&h88,&h25,&h25,&h4A,&h6F,&h2E,&h2E,&h5C,&h72
    ! DB &h1C,&h1C,&h38,&h24,&hA6,&hA6,&h57,&hF1,&hB4,&hB4,&h73,&hC7,&hC6,&hC6,&h97,&h51
    ! DB &hE8,&hE8,&hCB,&h23,&hDD,&hDD,&hA1,&h7C,&h74,&h74,&hE8,&h9C,&h1F,&h1F,&h3E,&h21
    ! DB &h4B,&h4B,&h96,&hDD,&hBD,&hBD,&h61,&hDC,&h8B,&h8B,&h0D,&h86,&h8A,&h8A,&h0F,&h85
    ! DB &h70,&h70,&hE0,&h90,&h3E,&h3E,&h7C,&h42,&hB5,&hB5,&h71,&hC4,&h66,&h66,&hCC,&hAA
    ! DB &h48,&h48,&h90,&hD8,&h03,&h03,&h06,&h05,&hF6,&hF6,&hF7,&h01,&h0E,&h0E,&h1C,&h12
    ! DB &h61,&h61,&hC2,&hA3,&h35,&h35,&h6A,&h5F,&h57,&h57,&hAE,&hF9,&hB9,&hB9,&h69,&hD0
    ! DB &h86,&h86,&h17,&h91,&hC1,&hC1,&h99,&h58,&h1D,&h1D,&h3A,&h27,&h9E,&h9E,&h27,&hB9
    ! DB &hE1,&hE1,&hD9,&h38,&hF8,&hF8,&hEB,&h13,&h98,&h98,&h2B,&hB3,&h11,&h11,&h22,&h33
    ! DB &h69,&h69,&hD2,&hBB,&hD9,&hD9,&hA9,&h70,&h8E,&h8E,&h07,&h89,&h94,&h94,&h33,&hA7
    ! DB &h9B,&h9B,&h2D,&hB6,&h1E,&h1E,&h3C,&h22,&h87,&h87,&h15,&h92,&hE9,&hE9,&hC9,&h20
    ! DB &hCE,&hCE,&h87,&h49,&h55,&h55,&hAA,&hFF,&h28,&h28,&h50,&h78,&hDF,&hDF,&hA5,&h7A
    ! DB &h8C,&h8C,&h03,&h8F,&hA1,&hA1,&h59,&hF8,&h89,&h89,&h09,&h80,&h0D,&h0D,&h1A,&h17
    ! DB &hBF,&hBF,&h65,&hDA,&hE6,&hE6,&hD7,&h31,&h42,&h42,&h84,&hC6,&h68,&h68,&hD0,&hB8
    ! DB &h41,&h41,&h82,&hC3,&h99,&h99,&h29,&hB0,&h2D,&h2D,&h5A,&h77,&h0F,&h0F,&h1E,&h11
    ! DB &hB0,&hB0,&h7B,&hCB,&h54,&h54,&hA8,&hFC,&hBB,&hBB,&h6D,&hD6,&h16,&h16,&h2C,&h3A
    ! DB &h63,&hC6,&hA5,&h63,&h7C,&hF8,&h84,&h7C,&h77,&hEE,&h99,&h77,&h7B,&hF6,&h8D,&h7B
    ! DB &hF2,&hFF,&h0D,&hF2,&h6B,&hD6,&hBD,&h6B,&h6F,&hDE,&hB1,&h6F,&hC5,&h91,&h54,&hC5
    ! DB &h30,&h60,&h50,&h30,&h01,&h02,&h03,&h01,&h67,&hCE,&hA9,&h67,&h2B,&h56,&h7D,&h2B
    ! DB &hFE,&hE7,&h19,&hFE,&hD7,&hB5,&h62,&hD7,&hAB,&h4D,&hE6,&hAB,&h76,&hEC,&h9A,&h76
    ! DB &hCA,&h8F,&h45,&hCA,&h82,&h1F,&h9D,&h82,&hC9,&h89,&h40,&hC9,&h7D,&hFA,&h87,&h7D
    ! DB &hFA,&hEF,&h15,&hFA,&h59,&hB2,&hEB,&h59,&h47,&h8E,&hC9,&h47,&hF0,&hFB,&h0B,&hF0
    ! DB &hAD,&h41,&hEC,&hAD,&hD4,&hB3,&h67,&hD4,&hA2,&h5F,&hFD,&hA2,&hAF,&h45,&hEA,&hAF
    ! DB &h9C,&h23,&hBF,&h9C,&hA4,&h53,&hF7,&hA4,&h72,&hE4,&h96,&h72,&hC0,&h9B,&h5B,&hC0
    ! DB &hB7,&h75,&hC2,&hB7,&hFD,&hE1,&h1C,&hFD,&h93,&h3D,&hAE,&h93,&h26,&h4C,&h6A,&h26
    ! DB &h36,&h6C,&h5A,&h36,&h3F,&h7E,&h41,&h3F,&hF7,&hF5,&h02,&hF7,&hCC,&h83,&h4F,&hCC
    ! DB &h34,&h68,&h5C,&h34,&hA5,&h51,&hF4,&hA5,&hE5,&hD1,&h34,&hE5,&hF1,&hF9,&h08,&hF1
    ! DB &h71,&hE2,&h93,&h71,&hD8,&hAB,&h73,&hD8,&h31,&h62,&h53,&h31,&h15,&h2A,&h3F,&h15
    ! DB &h04,&h08,&h0C,&h04,&hC7,&h95,&h52,&hC7,&h23,&h46,&h65,&h23,&hC3,&h9D,&h5E,&hC3
    ! DB &h18,&h30,&h28,&h18,&h96,&h37,&hA1,&h96,&h05,&h0A,&h0F,&h05,&h9A,&h2F,&hB5,&h9A
    ! DB &h07,&h0E,&h09,&h07,&h12,&h24,&h36,&h12,&h80,&h1B,&h9B,&h80,&hE2,&hDF,&h3D,&hE2
    ! DB &hEB,&hCD,&h26,&hEB,&h27,&h4E,&h69,&h27,&hB2,&h7F,&hCD,&hB2,&h75,&hEA,&h9F,&h75
    ! DB &h09,&h12,&h1B,&h09,&h83,&h1D,&h9E,&h83,&h2C,&h58,&h74,&h2C,&h1A,&h34,&h2E,&h1A
    ! DB &h1B,&h36,&h2D,&h1B,&h6E,&hDC,&hB2,&h6E,&h5A,&hB4,&hEE,&h5A,&hA0,&h5B,&hFB,&hA0
    ! DB &h52,&hA4,&hF6,&h52,&h3B,&h76,&h4D,&h3B,&hD6,&hB7,&h61,&hD6,&hB3,&h7D,&hCE,&hB3
    ! DB &h29,&h52,&h7B,&h29,&hE3,&hDD,&h3E,&hE3,&h2F,&h5E,&h71,&h2F,&h84,&h13,&h97,&h84
    ! DB &h53,&hA6,&hF5,&h53,&hD1,&hB9,&h68,&hD1,&h00,&h00,&h00,&h00,&hED,&hC1,&h2C,&hED
    ! DB &h20,&h40,&h60,&h20,&hFC,&hE3,&h1F,&hFC,&hB1,&h79,&hC8,&hB1,&h5B,&hB6,&hED,&h5B
    ! DB &h6A,&hD4,&hBE,&h6A,&hCB,&h8D,&h46,&hCB,&hBE,&h67,&hD9,&hBE,&h39,&h72,&h4B,&h39
    ! DB &h4A,&h94,&hDE,&h4A,&h4C,&h98,&hD4,&h4C,&h58,&hB0,&hE8,&h58,&hCF,&h85,&h4A,&hCF
    ! DB &hD0,&hBB,&h6B,&hD0,&hEF,&hC5,&h2A,&hEF,&hAA,&h4F,&hE5,&hAA,&hFB,&hED,&h16,&hFB
    ! DB &h43,&h86,&hC5,&h43,&h4D,&h9A,&hD7,&h4D,&h33,&h66,&h55,&h33,&h85,&h11,&h94,&h85
    ! DB &h45,&h8A,&hCF,&h45,&hF9,&hE9,&h10,&hF9,&h02,&h04,&h06,&h02,&h7F,&hFE,&h81,&h7F
    ! DB &h50,&hA0,&hF0,&h50,&h3C,&h78,&h44,&h3C,&h9F,&h25,&hBA,&h9F,&hA8,&h4B,&hE3,&hA8
    ! DB &h51,&hA2,&hF3,&h51,&hA3,&h5D,&hFE,&hA3,&h40,&h80,&hC0,&h40,&h8F,&h05,&h8A,&h8F
    ! DB &h92,&h3F,&hAD,&h92,&h9D,&h21,&hBC,&h9D,&h38,&h70,&h48,&h38,&hF5,&hF1,&h04,&hF5
    ! DB &hBC,&h63,&hDF,&hBC,&hB6,&h77,&hC1,&hB6,&hDA,&hAF,&h75,&hDA,&h21,&h42,&h63,&h21
    ! DB &h10,&h20,&h30,&h10,&hFF,&hE5,&h1A,&hFF,&hF3,&hFD,&h0E,&hF3,&hD2,&hBF,&h6D,&hD2
    ! DB &hCD,&h81,&h4C,&hCD,&h0C,&h18,&h14,&h0C,&h13,&h26,&h35,&h13,&hEC,&hC3,&h2F,&hEC
    ! DB &h5F,&hBE,&hE1,&h5F,&h97,&h35,&hA2,&h97,&h44,&h88,&hCC,&h44,&h17,&h2E,&h39,&h17
    ! DB &hC4,&h93,&h57,&hC4,&hA7,&h55,&hF2,&hA7,&h7E,&hFC,&h82,&h7E,&h3D,&h7A,&h47,&h3D
    ! DB &h64,&hC8,&hAC,&h64,&h5D,&hBA,&hE7,&h5D,&h19,&h32,&h2B,&h19,&h73,&hE6,&h95,&h73
    ! DB &h60,&hC0,&hA0,&h60,&h81,&h19,&h98,&h81,&h4F,&h9E,&hD1,&h4F,&hDC,&hA3,&h7F,&hDC
    ! DB &h22,&h44,&h66,&h22,&h2A,&h54,&h7E,&h2A,&h90,&h3B,&hAB,&h90,&h88,&h0B,&h83,&h88
    ! DB &h46,&h8C,&hCA,&h46,&hEE,&hC7,&h29,&hEE,&hB8,&h6B,&hD3,&hB8,&h14,&h28,&h3C,&h14
    ! DB &hDE,&hA7,&h79,&hDE,&h5E,&hBC,&hE2,&h5E,&h0B,&h16,&h1D,&h0B,&hDB,&hAD,&h76,&hDB
    ! DB &hE0,&hDB,&h3B,&hE0,&h32,&h64,&h56,&h32,&h3A,&h74,&h4E,&h3A,&h0A,&h14,&h1E,&h0A
    ! DB &h49,&h92,&hDB,&h49,&h06,&h0C,&h0A,&h06,&h24,&h48,&h6C,&h24,&h5C,&hB8,&hE4,&h5C
    ! DB &hC2,&h9F,&h5D,&hC2,&hD3,&hBD,&h6E,&hD3,&hAC,&h43,&hEF,&hAC,&h62,&hC4,&hA6,&h62
    ! DB &h91,&h39,&hA8,&h91,&h95,&h31,&hA4,&h95,&hE4,&hD3,&h37,&hE4,&h79,&hF2,&h8B,&h79
    ! DB &hE7,&hD5,&h32,&hE7,&hC8,&h8B,&h43,&hC8,&h37,&h6E,&h59,&h37,&h6D,&hDA,&hB7,&h6D
    ! DB &h8D,&h01,&h8C,&h8D,&hD5,&hB1,&h64,&hD5,&h4E,&h9C,&hD2,&h4E,&hA9,&h49,&hE0,&hA9
    ! DB &h6C,&hD8,&hB4,&h6C,&h56,&hAC,&hFA,&h56,&hF4,&hF3,&h07,&hF4,&hEA,&hCF,&h25,&hEA
    ! DB &h65,&hCA,&hAF,&h65,&h7A,&hF4,&h8E,&h7A,&hAE,&h47,&hE9,&hAE,&h08,&h10,&h18,&h08
    ! DB &hBA,&h6F,&hD5,&hBA,&h78,&hF0,&h88,&h78,&h25,&h4A,&h6F,&h25,&h2E,&h5C,&h72,&h2E
    ! DB &h1C,&h38,&h24,&h1C,&hA6,&h57,&hF1,&hA6,&hB4,&h73,&hC7,&hB4,&hC6,&h97,&h51,&hC6
    ! DB &hE8,&hCB,&h23,&hE8,&hDD,&hA1,&h7C,&hDD,&h74,&hE8,&h9C,&h74,&h1F,&h3E,&h21,&h1F
    ! DB &h4B,&h96,&hDD,&h4B,&hBD,&h61,&hDC,&hBD,&h8B,&h0D,&h86,&h8B,&h8A,&h0F,&h85,&h8A
    ! DB &h70,&hE0,&h90,&h70,&h3E,&h7C,&h42,&h3E,&hB5,&h71,&hC4,&hB5,&h66,&hCC,&hAA,&h66
    ! DB &h48,&h90,&hD8,&h48,&h03,&h06,&h05,&h03,&hF6,&hF7,&h01,&hF6,&h0E,&h1C,&h12,&h0E
    ! DB &h61,&hC2,&hA3,&h61,&h35,&h6A,&h5F,&h35,&h57,&hAE,&hF9,&h57,&hB9,&h69,&hD0,&hB9
    ! DB &h86,&h17,&h91,&h86,&hC1,&h99,&h58,&hC1,&h1D,&h3A,&h27,&h1D,&h9E,&h27,&hB9,&h9E
    ! DB &hE1,&hD9,&h38,&hE1,&hF8,&hEB,&h13,&hF8,&h98,&h2B,&hB3,&h98,&h11,&h22,&h33,&h11
    ! DB &h69,&hD2,&hBB,&h69,&hD9,&hA9,&h70,&hD9,&h8E,&h07,&h89,&h8E,&h94,&h33,&hA7,&h94
    ! DB &h9B,&h2D,&hB6,&h9B,&h1E,&h3C,&h22,&h1E,&h87,&h15,&h92,&h87,&hE9,&hC9,&h20,&hE9
    ! DB &hCE,&h87,&h49,&hCE,&h55,&hAA,&hFF,&h55,&h28,&h50,&h78,&h28,&hDF,&hA5,&h7A,&hDF
    ! DB &h8C,&h03,&h8F,&h8C,&hA1,&h59,&hF8,&hA1,&h89,&h09,&h80,&h89,&h0D,&h1A,&h17,&h0D
    ! DB &hBF,&h65,&hDA,&hBF,&hE6,&hD7,&h31,&hE6,&h42,&h84,&hC6,&h42,&h68,&hD0,&hB8,&h68
    ! DB &h41,&h82,&hC3,&h41,&h99,&h29,&hB0,&h99,&h2D,&h5A,&h77,&h2D,&h0F,&h1E,&h11,&h0F
    ! DB &hB0,&h7B,&hCB,&hB0,&h54,&hA8,&hFC,&h54,&hBB,&h6D,&hD6,&hBB,&h16,&h2C,&h3A,&h16
    ! DB &hC6,&hA5,&h63,&h63,&hF8,&h84,&h7C,&h7C,&hEE,&h99,&h77,&h77,&hF6,&h8D,&h7B,&h7B
    ! DB &hFF,&h0D,&hF2,&hF2,&hD6,&hBD,&h6B,&h6B,&hDE,&hB1,&h6F,&h6F,&h91,&h54,&hC5,&hC5
    ! DB &h60,&h50,&h30,&h30,&h02,&h03,&h01,&h01,&hCE,&hA9,&h67,&h67,&h56,&h7D,&h2B,&h2B
    ! DB &hE7,&h19,&hFE,&hFE,&hB5,&h62,&hD7,&hD7,&h4D,&hE6,&hAB,&hAB,&hEC,&h9A,&h76,&h76
    ! DB &h8F,&h45,&hCA,&hCA,&h1F,&h9D,&h82,&h82,&h89,&h40,&hC9,&hC9,&hFA,&h87,&h7D,&h7D
    ! DB &hEF,&h15,&hFA,&hFA,&hB2,&hEB,&h59,&h59,&h8E,&hC9,&h47,&h47,&hFB,&h0B,&hF0,&hF0
    ! DB &h41,&hEC,&hAD,&hAD,&hB3,&h67,&hD4,&hD4,&h5F,&hFD,&hA2,&hA2,&h45,&hEA,&hAF,&hAF
    ! DB &h23,&hBF,&h9C,&h9C,&h53,&hF7,&hA4,&hA4,&hE4,&h96,&h72,&h72,&h9B,&h5B,&hC0,&hC0
    ! DB &h75,&hC2,&hB7,&hB7,&hE1,&h1C,&hFD,&hFD,&h3D,&hAE,&h93,&h93,&h4C,&h6A,&h26,&h26
    ! DB &h6C,&h5A,&h36,&h36,&h7E,&h41,&h3F,&h3F,&hF5,&h02,&hF7,&hF7,&h83,&h4F,&hCC,&hCC
    ! DB &h68,&h5C,&h34,&h34,&h51,&hF4,&hA5,&hA5,&hD1,&h34,&hE5,&hE5,&hF9,&h08,&hF1,&hF1
    ! DB &hE2,&h93,&h71,&h71,&hAB,&h73,&hD8,&hD8,&h62,&h53,&h31,&h31,&h2A,&h3F,&h15,&h15
    ! DB &h08,&h0C,&h04,&h04,&h95,&h52,&hC7,&hC7,&h46,&h65,&h23,&h23,&h9D,&h5E,&hC3,&hC3
    ! DB &h30,&h28,&h18,&h18,&h37,&hA1,&h96,&h96,&h0A,&h0F,&h05,&h05,&h2F,&hB5,&h9A,&h9A
    ! DB &h0E,&h09,&h07,&h07,&h24,&h36,&h12,&h12,&h1B,&h9B,&h80,&h80,&hDF,&h3D,&hE2,&hE2
    ! DB &hCD,&h26,&hEB,&hEB,&h4E,&h69,&h27,&h27,&h7F,&hCD,&hB2,&hB2,&hEA,&h9F,&h75,&h75
    ! DB &h12,&h1B,&h09,&h09,&h1D,&h9E,&h83,&h83,&h58,&h74,&h2C,&h2C,&h34,&h2E,&h1A,&h1A
    ! DB &h36,&h2D,&h1B,&h1B,&hDC,&hB2,&h6E,&h6E,&hB4,&hEE,&h5A,&h5A,&h5B,&hFB,&hA0,&hA0
    ! DB &hA4,&hF6,&h52,&h52,&h76,&h4D,&h3B,&h3B,&hB7,&h61,&hD6,&hD6,&h7D,&hCE,&hB3,&hB3
    ! DB &h52,&h7B,&h29,&h29,&hDD,&h3E,&hE3,&hE3,&h5E,&h71,&h2F,&h2F,&h13,&h97,&h84,&h84
    ! DB &hA6,&hF5,&h53,&h53,&hB9,&h68,&hD1,&hD1,&h00,&h00,&h00,&h00,&hC1,&h2C,&hED,&hED
    ! DB &h40,&h60,&h20,&h20,&hE3,&h1F,&hFC,&hFC,&h79,&hC8,&hB1,&hB1,&hB6,&hED,&h5B,&h5B
    ! DB &hD4,&hBE,&h6A,&h6A,&h8D,&h46,&hCB,&hCB,&h67,&hD9,&hBE,&hBE,&h72,&h4B,&h39,&h39
    ! DB &h94,&hDE,&h4A,&h4A,&h98,&hD4,&h4C,&h4C,&hB0,&hE8,&h58,&h58,&h85,&h4A,&hCF,&hCF
    ! DB &hBB,&h6B,&hD0,&hD0,&hC5,&h2A,&hEF,&hEF,&h4F,&hE5,&hAA,&hAA,&hED,&h16,&hFB,&hFB
    ! DB &h86,&hC5,&h43,&h43,&h9A,&hD7,&h4D,&h4D,&h66,&h55,&h33,&h33,&h11,&h94,&h85,&h85
    ! DB &h8A,&hCF,&h45,&h45,&hE9,&h10,&hF9,&hF9,&h04,&h06,&h02,&h02,&hFE,&h81,&h7F,&h7F
    ! DB &hA0,&hF0,&h50,&h50,&h78,&h44,&h3C,&h3C,&h25,&hBA,&h9F,&h9F,&h4B,&hE3,&hA8,&hA8
    ! DB &hA2,&hF3,&h51,&h51,&h5D,&hFE,&hA3,&hA3,&h80,&hC0,&h40,&h40,&h05,&h8A,&h8F,&h8F
    ! DB &h3F,&hAD,&h92,&h92,&h21,&hBC,&h9D,&h9D,&h70,&h48,&h38,&h38,&hF1,&h04,&hF5,&hF5
    ! DB &h63,&hDF,&hBC,&hBC,&h77,&hC1,&hB6,&hB6,&hAF,&h75,&hDA,&hDA,&h42,&h63,&h21,&h21
    ! DB &h20,&h30,&h10,&h10,&hE5,&h1A,&hFF,&hFF,&hFD,&h0E,&hF3,&hF3,&hBF,&h6D,&hD2,&hD2
    ! DB &h81,&h4C,&hCD,&hCD,&h18,&h14,&h0C,&h0C,&h26,&h35,&h13,&h13,&hC3,&h2F,&hEC,&hEC
    ! DB &hBE,&hE1,&h5F,&h5F,&h35,&hA2,&h97,&h97,&h88,&hCC,&h44,&h44,&h2E,&h39,&h17,&h17
    ! DB &h93,&h57,&hC4,&hC4,&h55,&hF2,&hA7,&hA7,&hFC,&h82,&h7E,&h7E,&h7A,&h47,&h3D,&h3D
    ! DB &hC8,&hAC,&h64,&h64,&hBA,&hE7,&h5D,&h5D,&h32,&h2B,&h19,&h19,&hE6,&h95,&h73,&h73
    ! DB &hC0,&hA0,&h60,&h60,&h19,&h98,&h81,&h81,&h9E,&hD1,&h4F,&h4F,&hA3,&h7F,&hDC,&hDC
    ! DB &h44,&h66,&h22,&h22,&h54,&h7E,&h2A,&h2A,&h3B,&hAB,&h90,&h90,&h0B,&h83,&h88,&h88
    ! DB &h8C,&hCA,&h46,&h46,&hC7,&h29,&hEE,&hEE,&h6B,&hD3,&hB8,&hB8,&h28,&h3C,&h14,&h14
    ! DB &hA7,&h79,&hDE,&hDE,&hBC,&hE2,&h5E,&h5E,&h16,&h1D,&h0B,&h0B,&hAD,&h76,&hDB,&hDB
    ! DB &hDB,&h3B,&hE0,&hE0,&h64,&h56,&h32,&h32,&h74,&h4E,&h3A,&h3A,&h14,&h1E,&h0A,&h0A
    ! DB &h92,&hDB,&h49,&h49,&h0C,&h0A,&h06,&h06,&h48,&h6C,&h24,&h24,&hB8,&hE4,&h5C,&h5C
    ! DB &h9F,&h5D,&hC2,&hC2,&hBD,&h6E,&hD3,&hD3,&h43,&hEF,&hAC,&hAC,&hC4,&hA6,&h62,&h62
    ! DB &h39,&hA8,&h91,&h91,&h31,&hA4,&h95,&h95,&hD3,&h37,&hE4,&hE4,&hF2,&h8B,&h79,&h79
    ! DB &hD5,&h32,&hE7,&hE7,&h8B,&h43,&hC8,&hC8,&h6E,&h59,&h37,&h37,&hDA,&hB7,&h6D,&h6D
    ! DB &h01,&h8C,&h8D,&h8D,&hB1,&h64,&hD5,&hD5,&h9C,&hD2,&h4E,&h4E,&h49,&hE0,&hA9,&hA9
    ! DB &hD8,&hB4,&h6C,&h6C,&hAC,&hFA,&h56,&h56,&hF3,&h07,&hF4,&hF4,&hCF,&h25,&hEA,&hEA
    ! DB &hCA,&hAF,&h65,&h65,&hF4,&h8E,&h7A,&h7A,&h47,&hE9,&hAE,&hAE,&h10,&h18,&h08,&h08
    ! DB &h6F,&hD5,&hBA,&hBA,&hF0,&h88,&h78,&h78,&h4A,&h6F,&h25,&h25,&h5C,&h72,&h2E,&h2E
    ! DB &h38,&h24,&h1C,&h1C,&h57,&hF1,&hA6,&hA6,&h73,&hC7,&hB4,&hB4,&h97,&h51,&hC6,&hC6
    ! DB &hCB,&h23,&hE8,&hE8,&hA1,&h7C,&hDD,&hDD,&hE8,&h9C,&h74,&h74,&h3E,&h21,&h1F,&h1F
    ! DB &h96,&hDD,&h4B,&h4B,&h61,&hDC,&hBD,&hBD,&h0D,&h86,&h8B,&h8B,&h0F,&h85,&h8A,&h8A
    ! DB &hE0,&h90,&h70,&h70,&h7C,&h42,&h3E,&h3E,&h71,&hC4,&hB5,&hB5,&hCC,&hAA,&h66,&h66
    ! DB &h90,&hD8,&h48,&h48,&h06,&h05,&h03,&h03,&hF7,&h01,&hF6,&hF6,&h1C,&h12,&h0E,&h0E
    ! DB &hC2,&hA3,&h61,&h61,&h6A,&h5F,&h35,&h35,&hAE,&hF9,&h57,&h57,&h69,&hD0,&hB9,&hB9
    ! DB &h17,&h91,&h86,&h86,&h99,&h58,&hC1,&hC1,&h3A,&h27,&h1D,&h1D,&h27,&hB9,&h9E,&h9E
    ! DB &hD9,&h38,&hE1,&hE1,&hEB,&h13,&hF8,&hF8,&h2B,&hB3,&h98,&h98,&h22,&h33,&h11,&h11
    ! DB &hD2,&hBB,&h69,&h69,&hA9,&h70,&hD9,&hD9,&h07,&h89,&h8E,&h8E,&h33,&hA7,&h94,&h94
    ! DB &h2D,&hB6,&h9B,&h9B,&h3C,&h22,&h1E,&h1E,&h15,&h92,&h87,&h87,&hC9,&h20,&hE9,&hE9
    ! DB &h87,&h49,&hCE,&hCE,&hAA,&hFF,&h55,&h55,&h50,&h78,&h28,&h28,&hA5,&h7A,&hDF,&hDF
    ! DB &h03,&h8F,&h8C,&h8C,&h59,&hF8,&hA1,&hA1,&h09,&h80,&h89,&h89,&h1A,&h17,&h0D,&h0D
    ! DB &h65,&hDA,&hBF,&hBF,&hD7,&h31,&hE6,&hE6,&h84,&hC6,&h42,&h42,&hD0,&hB8,&h68,&h68
    ! DB &h82,&hC3,&h41,&h41,&h29,&hB0,&h99,&h99,&h5A,&h77,&h2D,&h2D,&h1E,&h11,&h0F,&h0F
    ! DB &h7B,&hCB,&hB0,&hB0,&hA8,&hFC,&h54,&h54,&h6D,&hD6,&hBB,&hBB,&h2C,&h3A,&h16,&h16
    ! DB &h50,&hA7,&hF4,&h51,&h53,&h65,&h41,&h7E,&hC3,&hA4,&h17,&h1A,&h96,&h5E,&h27,&h3A
    ! DB &hCB,&h6B,&hAB,&h3B,&hF1,&h45,&h9D,&h1F,&hAB,&h58,&hFA,&hAC,&h93,&h03,&hE3,&h4B
    ! DB &h55,&hFA,&h30,&h20,&hF6,&h6D,&h76,&hAD,&h91,&h76,&hCC,&h88,&h25,&h4C,&h02,&hF5
    ! DB &hFC,&hD7,&hE5,&h4F,&hD7,&hCB,&h2A,&hC5,&h80,&h44,&h35,&h26,&h8F,&hA3,&h62,&hB5
    ! DB &h49,&h5A,&hB1,&hDE,&h67,&h1B,&hBA,&h25,&h98,&h0E,&hEA,&h45,&hE1,&hC0,&hFE,&h5D
    ! DB &h02,&h75,&h2F,&hC3,&h12,&hF0,&h4C,&h81,&hA3,&h97,&h46,&h8D,&hC6,&hF9,&hD3,&h6B
    ! DB &hE7,&h5F,&h8F,&h03,&h95,&h9C,&h92,&h15,&hEB,&h7A,&h6D,&hBF,&hDA,&h59,&h52,&h95
    ! DB &h2D,&h83,&hBE,&hD4,&hD3,&h21,&h74,&h58,&h29,&h69,&hE0,&h49,&h44,&hC8,&hC9,&h8E
    ! DB &h6A,&h89,&hC2,&h75,&h78,&h79,&h8E,&hF4,&h6B,&h3E,&h58,&h99,&hDD,&h71,&hB9,&h27
    ! DB &hB6,&h4F,&hE1,&hBE,&h17,&hAD,&h88,&hF0,&h66,&hAC,&h20,&hC9,&hB4,&h3A,&hCE,&h7D
    ! DB &h18,&h4A,&hDF,&h63,&h82,&h31,&h1A,&hE5,&h60,&h33,&h51,&h97,&h45,&h7F,&h53,&h62
    ! DB &hE0,&h77,&h64,&hB1,&h84,&hAE,&h6B,&hBB,&h1C,&hA0,&h81,&hFE,&h94,&h2B,&h08,&hF9
    ! DB &h58,&h68,&h48,&h70,&h19,&hFD,&h45,&h8F,&h87,&h6C,&hDE,&h94,&hB7,&hF8,&h7B,&h52
    ! DB &h23,&hD3,&h73,&hAB,&hE2,&h02,&h4B,&h72,&h57,&h8F,&h1F,&hE3,&h2A,&hAB,&h55,&h66
    ! DB &h07,&h28,&hEB,&hB2,&h03,&hC2,&hB5,&h2F,&h9A,&h7B,&hC5,&h86,&hA5,&h08,&h37,&hD3
    ! DB &hF2,&h87,&h28,&h30,&hB2,&hA5,&hBF,&h23,&hBA,&h6A,&h03,&h02,&h5C,&h82,&h16,&hED
    ! DB &h2B,&h1C,&hCF,&h8A,&h92,&hB4,&h79,&hA7,&hF0,&hF2,&h07,&hF3,&hA1,&hE2,&h69,&h4E
    ! DB &hCD,&hF4,&hDA,&h65,&hD5,&hBE,&h05,&h06,&h1F,&h62,&h34,&hD1,&h8A,&hFE,&hA6,&hC4
    ! DB &h9D,&h53,&h2E,&h34,&hA0,&h55,&hF3,&hA2,&h32,&hE1,&h8A,&h05,&h75,&hEB,&hF6,&hA4
    ! DB &h39,&hEC,&h83,&h0B,&hAA,&hEF,&h60,&h40,&h06,&h9F,&h71,&h5E,&h51,&h10,&h6E,&hBD
    ! DB &hF9,&h8A,&h21,&h3E,&h3D,&h06,&hDD,&h96,&hAE,&h05,&h3E,&hDD,&h46,&hBD,&hE6,&h4D
    ! DB &hB5,&h8D,&h54,&h91,&h05,&h5D,&hC4,&h71,&h6F,&hD4,&h06,&h04,&hFF,&h15,&h50,&h60
    ! DB &h24,&hFB,&h98,&h19,&h97,&hE9,&hBD,&hD6,&hCC,&h43,&h40,&h89,&h77,&h9E,&hD9,&h67
    ! DB &hBD,&h42,&hE8,&hB0,&h88,&h8B,&h89,&h07,&h38,&h5B,&h19,&hE7,&hDB,&hEE,&hC8,&h79
    ! DB &h47,&h0A,&h7C,&hA1,&hE9,&h0F,&h42,&h7C,&hC9,&h1E,&h84,&hF8,&h00,&h00,&h00,&h00
    ! DB &h83,&h86,&h80,&h09,&h48,&hED,&h2B,&h32,&hAC,&h70,&h11,&h1E,&h4E,&h72,&h5A,&h6C
    ! DB &hFB,&hFF,&h0E,&hFD,&h56,&h38,&h85,&h0F,&h1E,&hD5,&hAE,&h3D,&h27,&h39,&h2D,&h36
    ! DB &h64,&hD9,&h0F,&h0A,&h21,&hA6,&h5C,&h68,&hD1,&h54,&h5B,&h9B,&h3A,&h2E,&h36,&h24
    ! DB &hB1,&h67,&h0A,&h0C,&h0F,&hE7,&h57,&h93,&hD2,&h96,&hEE,&hB4,&h9E,&h91,&h9B,&h1B
    ! DB &h4F,&hC5,&hC0,&h80,&hA2,&h20,&hDC,&h61,&h69,&h4B,&h77,&h5A,&h16,&h1A,&h12,&h1C
    ! DB &h0A,&hBA,&h93,&hE2,&hE5,&h2A,&hA0,&hC0,&h43,&hE0,&h22,&h3C,&h1D,&h17,&h1B,&h12
    ! DB &h0B,&h0D,&h09,&h0E,&hAD,&hC7,&h8B,&hF2,&hB9,&hA8,&hB6,&h2D,&hC8,&hA9,&h1E,&h14
    ! DB &h85,&h19,&hF1,&h57,&h4C,&h07,&h75,&hAF,&hBB,&hDD,&h99,&hEE,&hFD,&h60,&h7F,&hA3
    ! DB &h9F,&h26,&h01,&hF7,&hBC,&hF5,&h72,&h5C,&hC5,&h3B,&h66,&h44,&h34,&h7E,&hFB,&h5B
    ! DB &h76,&h29,&h43,&h8B,&hDC,&hC6,&h23,&hCB,&h68,&hFC,&hED,&hB6,&h63,&hF1,&hE4,&hB8
    ! DB &hCA,&hDC,&h31,&hD7,&h10,&h85,&h63,&h42,&h40,&h22,&h97,&h13,&h20,&h11,&hC6,&h84
    ! DB &h7D,&h24,&h4A,&h85,&hF8,&h3D,&hBB,&hD2,&h11,&h32,&hF9,&hAE,&h6D,&hA1,&h29,&hC7
    ! DB &h4B,&h2F,&h9E,&h1D,&hF3,&h30,&hB2,&hDC,&hEC,&h52,&h86,&h0D,&hD0,&hE3,&hC1,&h77
    ! DB &h6C,&h16,&hB3,&h2B,&h99,&hB9,&h70,&hA9,&hFA,&h48,&h94,&h11,&h22,&h64,&hE9,&h47
    ! DB &hC4,&h8C,&hFC,&hA8,&h1A,&h3F,&hF0,&hA0,&hD8,&h2C,&h7D,&h56,&hEF,&h90,&h33,&h22
    ! DB &hC7,&h4E,&h49,&h87,&hC1,&hD1,&h38,&hD9,&hFE,&hA2,&hCA,&h8C,&h36,&h0B,&hD4,&h98
    ! DB &hCF,&h81,&hF5,&hA6,&h28,&hDE,&h7A,&hA5,&h26,&h8E,&hB7,&hDA,&hA4,&hBF,&hAD,&h3F
    ! DB &hE4,&h9D,&h3A,&h2C,&h0D,&h92,&h78,&h50,&h9B,&hCC,&h5F,&h6A,&h62,&h46,&h7E,&h54
    ! DB &hC2,&h13,&h8D,&hF6,&hE8,&hB8,&hD8,&h90,&h5E,&hF7,&h39,&h2E,&hF5,&hAF,&hC3,&h82
    ! DB &hBE,&h80,&h5D,&h9F,&h7C,&h93,&hD0,&h69,&hA9,&h2D,&hD5,&h6F,&hB3,&h12,&h25,&hCF
    ! DB &h3B,&h99,&hAC,&hC8,&hA7,&h7D,&h18,&h10,&h6E,&h63,&h9C,&hE8,&h7B,&hBB,&h3B,&hDB
    ! DB &h09,&h78,&h26,&hCD,&hF4,&h18,&h59,&h6E,&h01,&hB7,&h9A,&hEC,&hA8,&h9A,&h4F,&h83
    ! DB &h65,&h6E,&h95,&hE6,&h7E,&hE6,&hFF,&hAA,&h08,&hCF,&hBC,&h21,&hE6,&hE8,&h15,&hEF
    ! DB &hD9,&h9B,&hE7,&hBA,&hCE,&h36,&h6F,&h4A,&hD4,&h09,&h9F,&hEA,&hD6,&h7C,&hB0,&h29
    ! DB &hAF,&hB2,&hA4,&h31,&h31,&h23,&h3F,&h2A,&h30,&h94,&hA5,&hC6,&hC0,&h66,&hA2,&h35
    ! DB &h37,&hBC,&h4E,&h74,&hA6,&hCA,&h82,&hFC,&hB0,&hD0,&h90,&hE0,&h15,&hD8,&hA7,&h33
    ! DB &h4A,&h98,&h04,&hF1,&hF7,&hDA,&hEC,&h41,&h0E,&h50,&hCD,&h7F,&h2F,&hF6,&h91,&h17
    ! DB &h8D,&hD6,&h4D,&h76,&h4D,&hB0,&hEF,&h43,&h54,&h4D,&hAA,&hCC,&hDF,&h04,&h96,&hE4
    ! DB &hE3,&hB5,&hD1,&h9E,&h1B,&h88,&h6A,&h4C,&hB8,&h1F,&h2C,&hC1,&h7F,&h51,&h65,&h46
    ! DB &h04,&hEA,&h5E,&h9D,&h5D,&h35,&h8C,&h01,&h73,&h74,&h87,&hFA,&h2E,&h41,&h0B,&hFB
    ! DB &h5A,&h1D,&h67,&hB3,&h52,&hD2,&hDB,&h92,&h33,&h56,&h10,&hE9,&h13,&h47,&hD6,&h6D
    ! DB &h8C,&h61,&hD7,&h9A,&h7A,&h0C,&hA1,&h37,&h8E,&h14,&hF8,&h59,&h89,&h3C,&h13,&hEB
    ! DB &hEE,&h27,&hA9,&hCE,&h35,&hC9,&h61,&hB7,&hED,&hE5,&h1C,&hE1,&h3C,&hB1,&h47,&h7A
    ! DB &h59,&hDF,&hD2,&h9C,&h3F,&h73,&hF2,&h55,&h79,&hCE,&h14,&h18,&hBF,&h37,&hC7,&h73
    ! DB &hEA,&hCD,&hF7,&h53,&h5B,&hAA,&hFD,&h5F,&h14,&h6F,&h3D,&hDF,&h86,&hDB,&h44,&h78
    ! DB &h81,&hF3,&hAF,&hCA,&h3E,&hC4,&h68,&hB9,&h2C,&h34,&h24,&h38,&h5F,&h40,&hA3,&hC2
    ! DB &h72,&hC3,&h1D,&h16,&h0C,&h25,&hE2,&hBC,&h8B,&h49,&h3C,&h28,&h41,&h95,&h0D,&hFF
    ! DB &h71,&h01,&hA8,&h39,&hDE,&hB3,&h0C,&h08,&h9C,&hE4,&hB4,&hD8,&h90,&hC1,&h56,&h64
    ! DB &h61,&h84,&hCB,&h7B,&h70,&hB6,&h32,&hD5,&h74,&h5C,&h6C,&h48,&h42,&h57,&hB8,&hD0
    ! DB &hA7,&hF4,&h51,&h50,&h65,&h41,&h7E,&h53,&hA4,&h17,&h1A,&hC3,&h5E,&h27,&h3A,&h96
    ! DB &h6B,&hAB,&h3B,&hCB,&h45,&h9D,&h1F,&hF1,&h58,&hFA,&hAC,&hAB,&h03,&hE3,&h4B,&h93
    ! DB &hFA,&h30,&h20,&h55,&h6D,&h76,&hAD,&hF6,&h76,&hCC,&h88,&h91,&h4C,&h02,&hF5,&h25
    ! DB &hD7,&hE5,&h4F,&hFC,&hCB,&h2A,&hC5,&hD7,&h44,&h35,&h26,&h80,&hA3,&h62,&hB5,&h8F
    ! DB &h5A,&hB1,&hDE,&h49,&h1B,&hBA,&h25,&h67,&h0E,&hEA,&h45,&h98,&hC0,&hFE,&h5D,&hE1
    ! DB &h75,&h2F,&hC3,&h02,&hF0,&h4C,&h81,&h12,&h97,&h46,&h8D,&hA3,&hF9,&hD3,&h6B,&hC6
    ! DB &h5F,&h8F,&h03,&hE7,&h9C,&h92,&h15,&h95,&h7A,&h6D,&hBF,&hEB,&h59,&h52,&h95,&hDA
    ! DB &h83,&hBE,&hD4,&h2D,&h21,&h74,&h58,&hD3,&h69,&hE0,&h49,&h29,&hC8,&hC9,&h8E,&h44
    ! DB &h89,&hC2,&h75,&h6A,&h79,&h8E,&hF4,&h78,&h3E,&h58,&h99,&h6B,&h71,&hB9,&h27,&hDD
    ! DB &h4F,&hE1,&hBE,&hB6,&hAD,&h88,&hF0,&h17,&hAC,&h20,&hC9,&h66,&h3A,&hCE,&h7D,&hB4
    ! DB &h4A,&hDF,&h63,&h18,&h31,&h1A,&hE5,&h82,&h33,&h51,&h97,&h60,&h7F,&h53,&h62,&h45
    ! DB &h77,&h64,&hB1,&hE0,&hAE,&h6B,&hBB,&h84,&hA0,&h81,&hFE,&h1C,&h2B,&h08,&hF9,&h94
    ! DB &h68,&h48,&h70,&h58,&hFD,&h45,&h8F,&h19,&h6C,&hDE,&h94,&h87,&hF8,&h7B,&h52,&hB7
    ! DB &hD3,&h73,&hAB,&h23,&h02,&h4B,&h72,&hE2,&h8F,&h1F,&hE3,&h57,&hAB,&h55,&h66,&h2A
    ! DB &h28,&hEB,&hB2,&h07,&hC2,&hB5,&h2F,&h03,&h7B,&hC5,&h86,&h9A,&h08,&h37,&hD3,&hA5
    ! DB &h87,&h28,&h30,&hF2,&hA5,&hBF,&h23,&hB2,&h6A,&h03,&h02,&hBA,&h82,&h16,&hED,&h5C
    ! DB &h1C,&hCF,&h8A,&h2B,&hB4,&h79,&hA7,&h92,&hF2,&h07,&hF3,&hF0,&hE2,&h69,&h4E,&hA1
    ! DB &hF4,&hDA,&h65,&hCD,&hBE,&h05,&h06,&hD5,&h62,&h34,&hD1,&h1F,&hFE,&hA6,&hC4,&h8A
    ! DB &h53,&h2E,&h34,&h9D,&h55,&hF3,&hA2,&hA0,&hE1,&h8A,&h05,&h32,&hEB,&hF6,&hA4,&h75
    ! DB &hEC,&h83,&h0B,&h39,&hEF,&h60,&h40,&hAA,&h9F,&h71,&h5E,&h06,&h10,&h6E,&hBD,&h51
    ! DB &h8A,&h21,&h3E,&hF9,&h06,&hDD,&h96,&h3D,&h05,&h3E,&hDD,&hAE,&hBD,&hE6,&h4D,&h46
    ! DB &h8D,&h54,&h91,&hB5,&h5D,&hC4,&h71,&h05,&hD4,&h06,&h04,&h6F,&h15,&h50,&h60,&hFF
    ! DB &hFB,&h98,&h19,&h24,&hE9,&hBD,&hD6,&h97,&h43,&h40,&h89,&hCC,&h9E,&hD9,&h67,&h77
    ! DB &h42,&hE8,&hB0,&hBD,&h8B,&h89,&h07,&h88,&h5B,&h19,&hE7,&h38,&hEE,&hC8,&h79,&hDB
    ! DB &h0A,&h7C,&hA1,&h47,&h0F,&h42,&h7C,&hE9,&h1E,&h84,&hF8,&hC9,&h00,&h00,&h00,&h00
    ! DB &h86,&h80,&h09,&h83,&hED,&h2B,&h32,&h48,&h70,&h11,&h1E,&hAC,&h72,&h5A,&h6C,&h4E
    ! DB &hFF,&h0E,&hFD,&hFB,&h38,&h85,&h0F,&h56,&hD5,&hAE,&h3D,&h1E,&h39,&h2D,&h36,&h27
    ! DB &hD9,&h0F,&h0A,&h64,&hA6,&h5C,&h68,&h21,&h54,&h5B,&h9B,&hD1,&h2E,&h36,&h24,&h3A
    ! DB &h67,&h0A,&h0C,&hB1,&hE7,&h57,&h93,&h0F,&h96,&hEE,&hB4,&hD2,&h91,&h9B,&h1B,&h9E
    ! DB &hC5,&hC0,&h80,&h4F,&h20,&hDC,&h61,&hA2,&h4B,&h77,&h5A,&h69,&h1A,&h12,&h1C,&h16
    ! DB &hBA,&h93,&hE2,&h0A,&h2A,&hA0,&hC0,&hE5,&hE0,&h22,&h3C,&h43,&h17,&h1B,&h12,&h1D
    ! DB &h0D,&h09,&h0E,&h0B,&hC7,&h8B,&hF2,&hAD,&hA8,&hB6,&h2D,&hB9,&hA9,&h1E,&h14,&hC8
    ! DB &h19,&hF1,&h57,&h85,&h07,&h75,&hAF,&h4C,&hDD,&h99,&hEE,&hBB,&h60,&h7F,&hA3,&hFD
    ! DB &h26,&h01,&hF7,&h9F,&hF5,&h72,&h5C,&hBC,&h3B,&h66,&h44,&hC5,&h7E,&hFB,&h5B,&h34
    ! DB &h29,&h43,&h8B,&h76,&hC6,&h23,&hCB,&hDC,&hFC,&hED,&hB6,&h68,&hF1,&hE4,&hB8,&h63
    ! DB &hDC,&h31,&hD7,&hCA,&h85,&h63,&h42,&h10,&h22,&h97,&h13,&h40,&h11,&hC6,&h84,&h20
    ! DB &h24,&h4A,&h85,&h7D,&h3D,&hBB,&hD2,&hF8,&h32,&hF9,&hAE,&h11,&hA1,&h29,&hC7,&h6D
    ! DB &h2F,&h9E,&h1D,&h4B,&h30,&hB2,&hDC,&hF3,&h52,&h86,&h0D,&hEC,&hE3,&hC1,&h77,&hD0
    ! DB &h16,&hB3,&h2B,&h6C,&hB9,&h70,&hA9,&h99,&h48,&h94,&h11,&hFA,&h64,&hE9,&h47,&h22
    ! DB &h8C,&hFC,&hA8,&hC4,&h3F,&hF0,&hA0,&h1A,&h2C,&h7D,&h56,&hD8,&h90,&h33,&h22,&hEF
    ! DB &h4E,&h49,&h87,&hC7,&hD1,&h38,&hD9,&hC1,&hA2,&hCA,&h8C,&hFE,&h0B,&hD4,&h98,&h36
    ! DB &h81,&hF5,&hA6,&hCF,&hDE,&h7A,&hA5,&h28,&h8E,&hB7,&hDA,&h26,&hBF,&hAD,&h3F,&hA4
    ! DB &h9D,&h3A,&h2C,&hE4,&h92,&h78,&h50,&h0D,&hCC,&h5F,&h6A,&h9B,&h46,&h7E,&h54,&h62
    ! DB &h13,&h8D,&hF6,&hC2,&hB8,&hD8,&h90,&hE8,&hF7,&h39,&h2E,&h5E,&hAF,&hC3,&h82,&hF5
    ! DB &h80,&h5D,&h9F,&hBE,&h93,&hD0,&h69,&h7C,&h2D,&hD5,&h6F,&hA9,&h12,&h25,&hCF,&hB3
    ! DB &h99,&hAC,&hC8,&h3B,&h7D,&h18,&h10,&hA7,&h63,&h9C,&hE8,&h6E,&hBB,&h3B,&hDB,&h7B
    ! DB &h78,&h26,&hCD,&h09,&h18,&h59,&h6E,&hF4,&hB7,&h9A,&hEC,&h01,&h9A,&h4F,&h83,&hA8
    ! DB &h6E,&h95,&hE6,&h65,&hE6,&hFF,&hAA,&h7E,&hCF,&hBC,&h21,&h08,&hE8,&h15,&hEF,&hE6
    ! DB &h9B,&hE7,&hBA,&hD9,&h36,&h6F,&h4A,&hCE,&h09,&h9F,&hEA,&hD4,&h7C,&hB0,&h29,&hD6
    ! DB &hB2,&hA4,&h31,&hAF,&h23,&h3F,&h2A,&h31,&h94,&hA5,&hC6,&h30,&h66,&hA2,&h35,&hC0
    ! DB &hBC,&h4E,&h74,&h37,&hCA,&h82,&hFC,&hA6,&hD0,&h90,&hE0,&hB0,&hD8,&hA7,&h33,&h15
    ! DB &h98,&h04,&hF1,&h4A,&hDA,&hEC,&h41,&hF7,&h50,&hCD,&h7F,&h0E,&hF6,&h91,&h17,&h2F
    ! DB &hD6,&h4D,&h76,&h8D,&hB0,&hEF,&h43,&h4D,&h4D,&hAA,&hCC,&h54,&h04,&h96,&hE4,&hDF
    ! DB &hB5,&hD1,&h9E,&hE3,&h88,&h6A,&h4C,&h1B,&h1F,&h2C,&hC1,&hB8,&h51,&h65,&h46,&h7F
    ! DB &hEA,&h5E,&h9D,&h04,&h35,&h8C,&h01,&h5D,&h74,&h87,&hFA,&h73,&h41,&h0B,&hFB,&h2E
    ! DB &h1D,&h67,&hB3,&h5A,&hD2,&hDB,&h92,&h52,&h56,&h10,&hE9,&h33,&h47,&hD6,&h6D,&h13
    ! DB &h61,&hD7,&h9A,&h8C,&h0C,&hA1,&h37,&h7A,&h14,&hF8,&h59,&h8E,&h3C,&h13,&hEB,&h89
    ! DB &h27,&hA9,&hCE,&hEE,&hC9,&h61,&hB7,&h35,&hE5,&h1C,&hE1,&hED,&hB1,&h47,&h7A,&h3C
    ! DB &hDF,&hD2,&h9C,&h59,&h73,&hF2,&h55,&h3F,&hCE,&h14,&h18,&h79,&h37,&hC7,&h73,&hBF
    ! DB &hCD,&hF7,&h53,&hEA,&hAA,&hFD,&h5F,&h5B,&h6F,&h3D,&hDF,&h14,&hDB,&h44,&h78,&h86
    ! DB &hF3,&hAF,&hCA,&h81,&hC4,&h68,&hB9,&h3E,&h34,&h24,&h38,&h2C,&h40,&hA3,&hC2,&h5F
    ! DB &hC3,&h1D,&h16,&h72,&h25,&hE2,&hBC,&h0C,&h49,&h3C,&h28,&h8B,&h95,&h0D,&hFF,&h41
    ! DB &h01,&hA8,&h39,&h71,&hB3,&h0C,&h08,&hDE,&hE4,&hB4,&hD8,&h9C,&hC1,&h56,&h64,&h90
    ! DB &h84,&hCB,&h7B,&h61,&hB6,&h32,&hD5,&h70,&h5C,&h6C,&h48,&h74,&h57,&hB8,&hD0,&h42
    ! DB &hF4,&h51,&h50,&hA7,&h41,&h7E,&h53,&h65,&h17,&h1A,&hC3,&hA4,&h27,&h3A,&h96,&h5E
    ! DB &hAB,&h3B,&hCB,&h6B,&h9D,&h1F,&hF1,&h45,&hFA,&hAC,&hAB,&h58,&hE3,&h4B,&h93,&h03
    ! DB &h30,&h20,&h55,&hFA,&h76,&hAD,&hF6,&h6D,&hCC,&h88,&h91,&h76,&h02,&hF5,&h25,&h4C
    ! DB &hE5,&h4F,&hFC,&hD7,&h2A,&hC5,&hD7,&hCB,&h35,&h26,&h80,&h44,&h62,&hB5,&h8F,&hA3
    ! DB &hB1,&hDE,&h49,&h5A,&hBA,&h25,&h67,&h1B,&hEA,&h45,&h98,&h0E,&hFE,&h5D,&hE1,&hC0
    ! DB &h2F,&hC3,&h02,&h75,&h4C,&h81,&h12,&hF0,&h46,&h8D,&hA3,&h97,&hD3,&h6B,&hC6,&hF9
    ! DB &h8F,&h03,&hE7,&h5F,&h92,&h15,&h95,&h9C,&h6D,&hBF,&hEB,&h7A,&h52,&h95,&hDA,&h59
    ! DB &hBE,&hD4,&h2D,&h83,&h74,&h58,&hD3,&h21,&hE0,&h49,&h29,&h69,&hC9,&h8E,&h44,&hC8
    ! DB &hC2,&h75,&h6A,&h89,&h8E,&hF4,&h78,&h79,&h58,&h99,&h6B,&h3E,&hB9,&h27,&hDD,&h71
    ! DB &hE1,&hBE,&hB6,&h4F,&h88,&hF0,&h17,&hAD,&h20,&hC9,&h66,&hAC,&hCE,&h7D,&hB4,&h3A
    ! DB &hDF,&h63,&h18,&h4A,&h1A,&hE5,&h82,&h31,&h51,&h97,&h60,&h33,&h53,&h62,&h45,&h7F
    ! DB &h64,&hB1,&hE0,&h77,&h6B,&hBB,&h84,&hAE,&h81,&hFE,&h1C,&hA0,&h08,&hF9,&h94,&h2B
    ! DB &h48,&h70,&h58,&h68,&h45,&h8F,&h19,&hFD,&hDE,&h94,&h87,&h6C,&h7B,&h52,&hB7,&hF8
    ! DB &h73,&hAB,&h23,&hD3,&h4B,&h72,&hE2,&h02,&h1F,&hE3,&h57,&h8F,&h55,&h66,&h2A,&hAB
    ! DB &hEB,&hB2,&h07,&h28,&hB5,&h2F,&h03,&hC2,&hC5,&h86,&h9A,&h7B,&h37,&hD3,&hA5,&h08
    ! DB &h28,&h30,&hF2,&h87,&hBF,&h23,&hB2,&hA5,&h03,&h02,&hBA,&h6A,&h16,&hED,&h5C,&h82
    ! DB &hCF,&h8A,&h2B,&h1C,&h79,&hA7,&h92,&hB4,&h07,&hF3,&hF0,&hF2,&h69,&h4E,&hA1,&hE2
    ! DB &hDA,&h65,&hCD,&hF4,&h05,&h06,&hD5,&hBE,&h34,&hD1,&h1F,&h62,&hA6,&hC4,&h8A,&hFE
    ! DB &h2E,&h34,&h9D,&h53,&hF3,&hA2,&hA0,&h55,&h8A,&h05,&h32,&hE1,&hF6,&hA4,&h75,&hEB
    ! DB &h83,&h0B,&h39,&hEC,&h60,&h40,&hAA,&hEF,&h71,&h5E,&h06,&h9F,&h6E,&hBD,&h51,&h10
    ! DB &h21,&h3E,&hF9,&h8A,&hDD,&h96,&h3D,&h06,&h3E,&hDD,&hAE,&h05,&hE6,&h4D,&h46,&hBD
    ! DB &h54,&h91,&hB5,&h8D,&hC4,&h71,&h05,&h5D,&h06,&h04,&h6F,&hD4,&h50,&h60,&hFF,&h15
    ! DB &h98,&h19,&h24,&hFB,&hBD,&hD6,&h97,&hE9,&h40,&h89,&hCC,&h43,&hD9,&h67,&h77,&h9E
    ! DB &hE8,&hB0,&hBD,&h42,&h89,&h07,&h88,&h8B,&h19,&hE7,&h38,&h5B,&hC8,&h79,&hDB,&hEE
    ! DB &h7C,&hA1,&h47,&h0A,&h42,&h7C,&hE9,&h0F,&h84,&hF8,&hC9,&h1E,&h00,&h00,&h00,&h00
    ! DB &h80,&h09,&h83,&h86,&h2B,&h32,&h48,&hED,&h11,&h1E,&hAC,&h70,&h5A,&h6C,&h4E,&h72
    ! DB &h0E,&hFD,&hFB,&hFF,&h85,&h0F,&h56,&h38,&hAE,&h3D,&h1E,&hD5,&h2D,&h36,&h27,&h39
    ! DB &h0F,&h0A,&h64,&hD9,&h5C,&h68,&h21,&hA6,&h5B,&h9B,&hD1,&h54,&h36,&h24,&h3A,&h2E
    ! DB &h0A,&h0C,&hB1,&h67,&h57,&h93,&h0F,&hE7,&hEE,&hB4,&hD2,&h96,&h9B,&h1B,&h9E,&h91
    ! DB &hC0,&h80,&h4F,&hC5,&hDC,&h61,&hA2,&h20,&h77,&h5A,&h69,&h4B,&h12,&h1C,&h16,&h1A
    ! DB &h93,&hE2,&h0A,&hBA,&hA0,&hC0,&hE5,&h2A,&h22,&h3C,&h43,&hE0,&h1B,&h12,&h1D,&h17
    ! DB &h09,&h0E,&h0B,&h0D,&h8B,&hF2,&hAD,&hC7,&hB6,&h2D,&hB9,&hA8,&h1E,&h14,&hC8,&hA9
    ! DB &hF1,&h57,&h85,&h19,&h75,&hAF,&h4C,&h07,&h99,&hEE,&hBB,&hDD,&h7F,&hA3,&hFD,&h60
    ! DB &h01,&hF7,&h9F,&h26,&h72,&h5C,&hBC,&hF5,&h66,&h44,&hC5,&h3B,&hFB,&h5B,&h34,&h7E
    ! DB &h43,&h8B,&h76,&h29,&h23,&hCB,&hDC,&hC6,&hED,&hB6,&h68,&hFC,&hE4,&hB8,&h63,&hF1
    ! DB &h31,&hD7,&hCA,&hDC,&h63,&h42,&h10,&h85,&h97,&h13,&h40,&h22,&hC6,&h84,&h20,&h11
    ! DB &h4A,&h85,&h7D,&h24,&hBB,&hD2,&hF8,&h3D,&hF9,&hAE,&h11,&h32,&h29,&hC7,&h6D,&hA1
    ! DB &h9E,&h1D,&h4B,&h2F,&hB2,&hDC,&hF3,&h30,&h86,&h0D,&hEC,&h52,&hC1,&h77,&hD0,&hE3
    ! DB &hB3,&h2B,&h6C,&h16,&h70,&hA9,&h99,&hB9,&h94,&h11,&hFA,&h48,&hE9,&h47,&h22,&h64
    ! DB &hFC,&hA8,&hC4,&h8C,&hF0,&hA0,&h1A,&h3F,&h7D,&h56,&hD8,&h2C,&h33,&h22,&hEF,&h90
    ! DB &h49,&h87,&hC7,&h4E,&h38,&hD9,&hC1,&hD1,&hCA,&h8C,&hFE,&hA2,&hD4,&h98,&h36,&h0B
    ! DB &hF5,&hA6,&hCF,&h81,&h7A,&hA5,&h28,&hDE,&hB7,&hDA,&h26,&h8E,&hAD,&h3F,&hA4,&hBF
    ! DB &h3A,&h2C,&hE4,&h9D,&h78,&h50,&h0D,&h92,&h5F,&h6A,&h9B,&hCC,&h7E,&h54,&h62,&h46
    ! DB &h8D,&hF6,&hC2,&h13,&hD8,&h90,&hE8,&hB8,&h39,&h2E,&h5E,&hF7,&hC3,&h82,&hF5,&hAF
    ! DB &h5D,&h9F,&hBE,&h80,&hD0,&h69,&h7C,&h93,&hD5,&h6F,&hA9,&h2D,&h25,&hCF,&hB3,&h12
    ! DB &hAC,&hC8,&h3B,&h99,&h18,&h10,&hA7,&h7D,&h9C,&hE8,&h6E,&h63,&h3B,&hDB,&h7B,&hBB
    ! DB &h26,&hCD,&h09,&h78,&h59,&h6E,&hF4,&h18,&h9A,&hEC,&h01,&hB7,&h4F,&h83,&hA8,&h9A
    ! DB &h95,&hE6,&h65,&h6E,&hFF,&hAA,&h7E,&hE6,&hBC,&h21,&h08,&hCF,&h15,&hEF,&hE6,&hE8
    ! DB &hE7,&hBA,&hD9,&h9B,&h6F,&h4A,&hCE,&h36,&h9F,&hEA,&hD4,&h09,&hB0,&h29,&hD6,&h7C
    ! DB &hA4,&h31,&hAF,&hB2,&h3F,&h2A,&h31,&h23,&hA5,&hC6,&h30,&h94,&hA2,&h35,&hC0,&h66
    ! DB &h4E,&h74,&h37,&hBC,&h82,&hFC,&hA6,&hCA,&h90,&hE0,&hB0,&hD0,&hA7,&h33,&h15,&hD8
    ! DB &h04,&hF1,&h4A,&h98,&hEC,&h41,&hF7,&hDA,&hCD,&h7F,&h0E,&h50,&h91,&h17,&h2F,&hF6
    ! DB &h4D,&h76,&h8D,&hD6,&hEF,&h43,&h4D,&hB0,&hAA,&hCC,&h54,&h4D,&h96,&hE4,&hDF,&h04
    ! DB &hD1,&h9E,&hE3,&hB5,&h6A,&h4C,&h1B,&h88,&h2C,&hC1,&hB8,&h1F,&h65,&h46,&h7F,&h51
    ! DB &h5E,&h9D,&h04,&hEA,&h8C,&h01,&h5D,&h35,&h87,&hFA,&h73,&h74,&h0B,&hFB,&h2E,&h41
    ! DB &h67,&hB3,&h5A,&h1D,&hDB,&h92,&h52,&hD2,&h10,&hE9,&h33,&h56,&hD6,&h6D,&h13,&h47
    ! DB &hD7,&h9A,&h8C,&h61,&hA1,&h37,&h7A,&h0C,&hF8,&h59,&h8E,&h14,&h13,&hEB,&h89,&h3C
    ! DB &hA9,&hCE,&hEE,&h27,&h61,&hB7,&h35,&hC9,&h1C,&hE1,&hED,&hE5,&h47,&h7A,&h3C,&hB1
    ! DB &hD2,&h9C,&h59,&hDF,&hF2,&h55,&h3F,&h73,&h14,&h18,&h79,&hCE,&hC7,&h73,&hBF,&h37
    ! DB &hF7,&h53,&hEA,&hCD,&hFD,&h5F,&h5B,&hAA,&h3D,&hDF,&h14,&h6F,&h44,&h78,&h86,&hDB
    ! DB &hAF,&hCA,&h81,&hF3,&h68,&hB9,&h3E,&hC4,&h24,&h38,&h2C,&h34,&hA3,&hC2,&h5F,&h40
    ! DB &h1D,&h16,&h72,&hC3,&hE2,&hBC,&h0C,&h25,&h3C,&h28,&h8B,&h49,&h0D,&hFF,&h41,&h95
    ! DB &hA8,&h39,&h71,&h01,&h0C,&h08,&hDE,&hB3,&hB4,&hD8,&h9C,&hE4,&h56,&h64,&h90,&hC1
    ! DB &hCB,&h7B,&h61,&h84,&h32,&hD5,&h70,&hB6,&h6C,&h48,&h74,&h5C,&hB8,&hD0,&h42,&h57
    ! DB &h51,&h50,&hA7,&hF4,&h7E,&h53,&h65,&h41,&h1A,&hC3,&hA4,&h17,&h3A,&h96,&h5E,&h27
    ! DB &h3B,&hCB,&h6B,&hAB,&h1F,&hF1,&h45,&h9D,&hAC,&hAB,&h58,&hFA,&h4B,&h93,&h03,&hE3
    ! DB &h20,&h55,&hFA,&h30,&hAD,&hF6,&h6D,&h76,&h88,&h91,&h76,&hCC,&hF5,&h25,&h4C,&h02
    ! DB &h4F,&hFC,&hD7,&hE5,&hC5,&hD7,&hCB,&h2A,&h26,&h80,&h44,&h35,&hB5,&h8F,&hA3,&h62
    ! DB &hDE,&h49,&h5A,&hB1,&h25,&h67,&h1B,&hBA,&h45,&h98,&h0E,&hEA,&h5D,&hE1,&hC0,&hFE
    ! DB &hC3,&h02,&h75,&h2F,&h81,&h12,&hF0,&h4C,&h8D,&hA3,&h97,&h46,&h6B,&hC6,&hF9,&hD3
    ! DB &h03,&hE7,&h5F,&h8F,&h15,&h95,&h9C,&h92,&hBF,&hEB,&h7A,&h6D,&h95,&hDA,&h59,&h52
    ! DB &hD4,&h2D,&h83,&hBE,&h58,&hD3,&h21,&h74,&h49,&h29,&h69,&hE0,&h8E,&h44,&hC8,&hC9
    ! DB &h75,&h6A,&h89,&hC2,&hF4,&h78,&h79,&h8E,&h99,&h6B,&h3E,&h58,&h27,&hDD,&h71,&hB9
    ! DB &hBE,&hB6,&h4F,&hE1,&hF0,&h17,&hAD,&h88,&hC9,&h66,&hAC,&h20,&h7D,&hB4,&h3A,&hCE
    ! DB &h63,&h18,&h4A,&hDF,&hE5,&h82,&h31,&h1A,&h97,&h60,&h33,&h51,&h62,&h45,&h7F,&h53
    ! DB &hB1,&hE0,&h77,&h64,&hBB,&h84,&hAE,&h6B,&hFE,&h1C,&hA0,&h81,&hF9,&h94,&h2B,&h08
    ! DB &h70,&h58,&h68,&h48,&h8F,&h19,&hFD,&h45,&h94,&h87,&h6C,&hDE,&h52,&hB7,&hF8,&h7B
    ! DB &hAB,&h23,&hD3,&h73,&h72,&hE2,&h02,&h4B,&hE3,&h57,&h8F,&h1F,&h66,&h2A,&hAB,&h55
    ! DB &hB2,&h07,&h28,&hEB,&h2F,&h03,&hC2,&hB5,&h86,&h9A,&h7B,&hC5,&hD3,&hA5,&h08,&h37
    ! DB &h30,&hF2,&h87,&h28,&h23,&hB2,&hA5,&hBF,&h02,&hBA,&h6A,&h03,&hED,&h5C,&h82,&h16
    ! DB &h8A,&h2B,&h1C,&hCF,&hA7,&h92,&hB4,&h79,&hF3,&hF0,&hF2,&h07,&h4E,&hA1,&hE2,&h69
    ! DB &h65,&hCD,&hF4,&hDA,&h06,&hD5,&hBE,&h05,&hD1,&h1F,&h62,&h34,&hC4,&h8A,&hFE,&hA6
    ! DB &h34,&h9D,&h53,&h2E,&hA2,&hA0,&h55,&hF3,&h05,&h32,&hE1,&h8A,&hA4,&h75,&hEB,&hF6
    ! DB &h0B,&h39,&hEC,&h83,&h40,&hAA,&hEF,&h60,&h5E,&h06,&h9F,&h71,&hBD,&h51,&h10,&h6E
    ! DB &h3E,&hF9,&h8A,&h21,&h96,&h3D,&h06,&hDD,&hDD,&hAE,&h05,&h3E,&h4D,&h46,&hBD,&hE6
    ! DB &h91,&hB5,&h8D,&h54,&h71,&h05,&h5D,&hC4,&h04,&h6F,&hD4,&h06,&h60,&hFF,&h15,&h50
    ! DB &h19,&h24,&hFB,&h98,&hD6,&h97,&hE9,&hBD,&h89,&hCC,&h43,&h40,&h67,&h77,&h9E,&hD9
    ! DB &hB0,&hBD,&h42,&hE8,&h07,&h88,&h8B,&h89,&hE7,&h38,&h5B,&h19,&h79,&hDB,&hEE,&hC8
    ! DB &hA1,&h47,&h0A,&h7C,&h7C,&hE9,&h0F,&h42,&hF8,&hC9,&h1E,&h84,&h00,&h00,&h00,&h00
    ! DB &h09,&h83,&h86,&h80,&h32,&h48,&hED,&h2B,&h1E,&hAC,&h70,&h11,&h6C,&h4E,&h72,&h5A
    ! DB &hFD,&hFB,&hFF,&h0E,&h0F,&h56,&h38,&h85,&h3D,&h1E,&hD5,&hAE,&h36,&h27,&h39,&h2D
    ! DB &h0A,&h64,&hD9,&h0F,&h68,&h21,&hA6,&h5C,&h9B,&hD1,&h54,&h5B,&h24,&h3A,&h2E,&h36
    ! DB &h0C,&hB1,&h67,&h0A,&h93,&h0F,&hE7,&h57,&hB4,&hD2,&h96,&hEE,&h1B,&h9E,&h91,&h9B
    ! DB &h80,&h4F,&hC5,&hC0,&h61,&hA2,&h20,&hDC,&h5A,&h69,&h4B,&h77,&h1C,&h16,&h1A,&h12
    ! DB &hE2,&h0A,&hBA,&h93,&hC0,&hE5,&h2A,&hA0,&h3C,&h43,&hE0,&h22,&h12,&h1D,&h17,&h1B
    ! DB &h0E,&h0B,&h0D,&h09,&hF2,&hAD,&hC7,&h8B,&h2D,&hB9,&hA8,&hB6,&h14,&hC8,&hA9,&h1E
    ! DB &h57,&h85,&h19,&hF1,&hAF,&h4C,&h07,&h75,&hEE,&hBB,&hDD,&h99,&hA3,&hFD,&h60,&h7F
    ! DB &hF7,&h9F,&h26,&h01,&h5C,&hBC,&hF5,&h72,&h44,&hC5,&h3B,&h66,&h5B,&h34,&h7E,&hFB
    ! DB &h8B,&h76,&h29,&h43,&hCB,&hDC,&hC6,&h23,&hB6,&h68,&hFC,&hED,&hB8,&h63,&hF1,&hE4
    ! DB &hD7,&hCA,&hDC,&h31,&h42,&h10,&h85,&h63,&h13,&h40,&h22,&h97,&h84,&h20,&h11,&hC6
    ! DB &h85,&h7D,&h24,&h4A,&hD2,&hF8,&h3D,&hBB,&hAE,&h11,&h32,&hF9,&hC7,&h6D,&hA1,&h29
    ! DB &h1D,&h4B,&h2F,&h9E,&hDC,&hF3,&h30,&hB2,&h0D,&hEC,&h52,&h86,&h77,&hD0,&hE3,&hC1
    ! DB &h2B,&h6C,&h16,&hB3,&hA9,&h99,&hB9,&h70,&h11,&hFA,&h48,&h94,&h47,&h22,&h64,&hE9
    ! DB &hA8,&hC4,&h8C,&hFC,&hA0,&h1A,&h3F,&hF0,&h56,&hD8,&h2C,&h7D,&h22,&hEF,&h90,&h33
    ! DB &h87,&hC7,&h4E,&h49,&hD9,&hC1,&hD1,&h38,&h8C,&hFE,&hA2,&hCA,&h98,&h36,&h0B,&hD4
    ! DB &hA6,&hCF,&h81,&hF5,&hA5,&h28,&hDE,&h7A,&hDA,&h26,&h8E,&hB7,&h3F,&hA4,&hBF,&hAD
    ! DB &h2C,&hE4,&h9D,&h3A,&h50,&h0D,&h92,&h78,&h6A,&h9B,&hCC,&h5F,&h54,&h62,&h46,&h7E
    ! DB &hF6,&hC2,&h13,&h8D,&h90,&hE8,&hB8,&hD8,&h2E,&h5E,&hF7,&h39,&h82,&hF5,&hAF,&hC3
    ! DB &h9F,&hBE,&h80,&h5D,&h69,&h7C,&h93,&hD0,&h6F,&hA9,&h2D,&hD5,&hCF,&hB3,&h12,&h25
    ! DB &hC8,&h3B,&h99,&hAC,&h10,&hA7,&h7D,&h18,&hE8,&h6E,&h63,&h9C,&hDB,&h7B,&hBB,&h3B
    ! DB &hCD,&h09,&h78,&h26,&h6E,&hF4,&h18,&h59,&hEC,&h01,&hB7,&h9A,&h83,&hA8,&h9A,&h4F
    ! DB &hE6,&h65,&h6E,&h95,&hAA,&h7E,&hE6,&hFF,&h21,&h08,&hCF,&hBC,&hEF,&hE6,&hE8,&h15
    ! DB &hBA,&hD9,&h9B,&hE7,&h4A,&hCE,&h36,&h6F,&hEA,&hD4,&h09,&h9F,&h29,&hD6,&h7C,&hB0
    ! DB &h31,&hAF,&hB2,&hA4,&h2A,&h31,&h23,&h3F,&hC6,&h30,&h94,&hA5,&h35,&hC0,&h66,&hA2
    ! DB &h74,&h37,&hBC,&h4E,&hFC,&hA6,&hCA,&h82,&hE0,&hB0,&hD0,&h90,&h33,&h15,&hD8,&hA7
    ! DB &hF1,&h4A,&h98,&h04,&h41,&hF7,&hDA,&hEC,&h7F,&h0E,&h50,&hCD,&h17,&h2F,&hF6,&h91
    ! DB &h76,&h8D,&hD6,&h4D,&h43,&h4D,&hB0,&hEF,&hCC,&h54,&h4D,&hAA,&hE4,&hDF,&h04,&h96
    ! DB &h9E,&hE3,&hB5,&hD1,&h4C,&h1B,&h88,&h6A,&hC1,&hB8,&h1F,&h2C,&h46,&h7F,&h51,&h65
    ! DB &h9D,&h04,&hEA,&h5E,&h01,&h5D,&h35,&h8C,&hFA,&h73,&h74,&h87,&hFB,&h2E,&h41,&h0B
    ! DB &hB3,&h5A,&h1D,&h67,&h92,&h52,&hD2,&hDB,&hE9,&h33,&h56,&h10,&h6D,&h13,&h47,&hD6
    ! DB &h9A,&h8C,&h61,&hD7,&h37,&h7A,&h0C,&hA1,&h59,&h8E,&h14,&hF8,&hEB,&h89,&h3C,&h13
    ! DB &hCE,&hEE,&h27,&hA9,&hB7,&h35,&hC9,&h61,&hE1,&hED,&hE5,&h1C,&h7A,&h3C,&hB1,&h47
    ! DB &h9C,&h59,&hDF,&hD2,&h55,&h3F,&h73,&hF2,&h18,&h79,&hCE,&h14,&h73,&hBF,&h37,&hC7
    ! DB &h53,&hEA,&hCD,&hF7,&h5F,&h5B,&hAA,&hFD,&hDF,&h14,&h6F,&h3D,&h78,&h86,&hDB,&h44
    ! DB &hCA,&h81,&hF3,&hAF,&hB9,&h3E,&hC4,&h68,&h38,&h2C,&h34,&h24,&hC2,&h5F,&h40,&hA3
    ! DB &h16,&h72,&hC3,&h1D,&hBC,&h0C,&h25,&hE2,&h28,&h8B,&h49,&h3C,&hFF,&h41,&h95,&h0D
    ! DB &h39,&h71,&h01,&hA8,&h08,&hDE,&hB3,&h0C,&hD8,&h9C,&hE4,&hB4,&h64,&h90,&hC1,&h56
    ! DB &h7B,&h61,&h84,&hCB,&hD5,&h70,&hB6,&h32,&h48,&h74,&h5C,&h6C,&hD0,&h42,&h57,&hB8
    ! DB &h63,&h7C,&h77,&h7B,&hF2,&h6B,&h6F,&hC5,&h30,&h01,&h67,&h2B,&hFE,&hD7,&hAB,&h76
    ! DB &hCA,&h82,&hC9,&h7D,&hFA,&h59,&h47,&hF0,&hAD,&hD4,&hA2,&hAF,&h9C,&hA4,&h72,&hC0
    ! DB &hB7,&hFD,&h93,&h26,&h36,&h3F,&hF7,&hCC,&h34,&hA5,&hE5,&hF1,&h71,&hD8,&h31,&h15
    ! DB &h04,&hC7,&h23,&hC3,&h18,&h96,&h05,&h9A,&h07,&h12,&h80,&hE2,&hEB,&h27,&hB2,&h75
    ! DB &h09,&h83,&h2C,&h1A,&h1B,&h6E,&h5A,&hA0,&h52,&h3B,&hD6,&hB3,&h29,&hE3,&h2F,&h84
    ! DB &h53,&hD1,&h00,&hED,&h20,&hFC,&hB1,&h5B,&h6A,&hCB,&hBE,&h39,&h4A,&h4C,&h58,&hCF
    ! DB &hD0,&hEF,&hAA,&hFB,&h43,&h4D,&h33,&h85,&h45,&hF9,&h02,&h7F,&h50,&h3C,&h9F,&hA8
    ! DB &h51,&hA3,&h40,&h8F,&h92,&h9D,&h38,&hF5,&hBC,&hB6,&hDA,&h21,&h10,&hFF,&hF3,&hD2
    ! DB &hCD,&h0C,&h13,&hEC,&h5F,&h97,&h44,&h17,&hC4,&hA7,&h7E,&h3D,&h64,&h5D,&h19,&h73
    ! DB &h60,&h81,&h4F,&hDC,&h22,&h2A,&h90,&h88,&h46,&hEE,&hB8,&h14,&hDE,&h5E,&h0B,&hDB
    ! DB &hE0,&h32,&h3A,&h0A,&h49,&h06,&h24,&h5C,&hC2,&hD3,&hAC,&h62,&h91,&h95,&hE4,&h79
    ! DB &hE7,&hC8,&h37,&h6D,&h8D,&hD5,&h4E,&hA9,&h6C,&h56,&hF4,&hEA,&h65,&h7A,&hAE,&h08
    ! DB &hBA,&h78,&h25,&h2E,&h1C,&hA6,&hB4,&hC6,&hE8,&hDD,&h74,&h1F,&h4B,&hBD,&h8B,&h8A
    ! DB &h70,&h3E,&hB5,&h66,&h48,&h03,&hF6,&h0E,&h61,&h35,&h57,&hB9,&h86,&hC1,&h1D,&h9E
    ! DB &hE1,&hF8,&h98,&h11,&h69,&hD9,&h8E,&h94,&h9B,&h1E,&h87,&hE9,&hCE,&h55,&h28,&hDF
    ! DB &h8C,&hA1,&h89,&h0D,&hBF,&hE6,&h42,&h68,&h41,&h99,&h2D,&h0F,&hB0,&h54,&hBB,&h16
    ! DB &h52,&h09,&h6A,&hD5,&h30,&h36,&hA5,&h38,&hBF,&h40,&hA3,&h9E,&h81,&hF3,&hD7,&hFB
    ! DB &h7C,&hE3,&h39,&h82,&h9B,&h2F,&hFF,&h87,&h34,&h8E,&h43,&h44,&hC4,&hDE,&hE9,&hCB
    ! DB &h54,&h7B,&h94,&h32,&hA6,&hC2,&h23,&h3D,&hEE,&h4C,&h95,&h0B,&h42,&hFA,&hC3,&h4E
    ! DB &h08,&h2E,&hA1,&h66,&h28,&hD9,&h24,&hB2,&h76,&h5B,&hA2,&h49,&h6D,&h8B,&hD1,&h25
    ! DB &h72,&hF8,&hF6,&h64,&h86,&h68,&h98,&h16,&hD4,&hA4,&h5C,&hCC,&h5D,&h65,&hB6,&h92
    ! DB &h6C,&h70,&h48,&h50,&hFD,&hED,&hB9,&hDA,&h5E,&h15,&h46,&h57,&hA7,&h8D,&h9D,&h84
    ! DB &h90,&hD8,&hAB,&h00,&h8C,&hBC,&hD3,&h0A,&hF7,&hE4,&h58,&h05,&hB8,&hB3,&h45,&h06
    ! DB &hD0,&h2C,&h1E,&h8F,&hCA,&h3F,&h0F,&h02,&hC1,&hAF,&hBD,&h03,&h01,&h13,&h8A,&h6B
    ! DB &h3A,&h91,&h11,&h41,&h4F,&h67,&hDC,&hEA,&h97,&hF2,&hCF,&hCE,&hF0,&hB4,&hE6,&h73
    ! DB &h96,&hAC,&h74,&h22,&hE7,&hAD,&h35,&h85,&hE2,&hF9,&h37,&hE8,&h1C,&h75,&hDF,&h6E
    ! DB &h47,&hF1,&h1A,&h71,&h1D,&h29,&hC5,&h89,&h6F,&hB7,&h62,&h0E,&hAA,&h18,&hBE,&h1B
    ! DB &hFC,&h56,&h3E,&h4B,&hC6,&hD2,&h79,&h20,&h9A,&hDB,&hC0,&hFE,&h78,&hCD,&h5A,&hF4
    ! DB &h1F,&hDD,&hA8,&h33,&h88,&h07,&hC7,&h31,&hB1,&h12,&h10,&h59,&h27,&h80,&hEC,&h5F
    ! DB &h60,&h51,&h7F,&hA9,&h19,&hB5,&h4A,&h0D,&h2D,&hE5,&h7A,&h9F,&h93,&hC9,&h9C,&hEF
    ! DB &hA0,&hE0,&h3B,&h4D,&hAE,&h2A,&hF5,&hB0,&hC8,&hEB,&hBB,&h3C,&h83,&h53,&h99,&h61
    ! DB &h17,&h2B,&h04,&h7E,&hBA,&h77,&hD6,&h26,&hE1,&h69,&h14,&h63,&h55,&h21,&h0C,&h7D
    ! DB &h00,&h00,&h00,&h01,&h00,&h00,&h00,&h02,&h00,&h00,&h00,&h04,&h00,&h00,&h00,&h08
    ! DB &h00,&h00,&h00,&h10,&h00,&h00,&h00,&h20,&h00,&h00,&h00,&h40,&h00,&h00,&h00,&h80
    ! DB &h00,&h00,&h00,&h1B,&h00,&h00,&h00,&h36
    END FUNCTION
Working...
X