Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
destruk
Level 10

Re: PNG Encoder for Roku Proof of Concept

Forget I even commented on this. Nobody gets me, but me. Smiley Happy
There are hundreds of ways to do the same thing for your situations - a little bit of thought would have -
sports teams -
One image with every team logo on it and use roRegion to select the logos you need to match up - while not having to convert the image at all, ever, not once. - Much faster, easier to manage, easier to code.
Scores - send the score to the server and using PHP's built-in image manipulation and creation features to create the end result and convert using any of the free graphics libraries to spit or or even email the image while conserving the roku user's bandwidth - in ANY format without needing to be limited to PNG.
Just because the Roku could balance the USA's budget over a period of 6 months doesn't mean it's the best way to do it, but if that puts a feather in your cap and on your resume, that's just totally AWESOME.
By using the correct tool for the job, with the most efficiency available in doing so, you'll save a lot of time and generally end up with a better result.

Does that at all make sense to you guys, or are we still in the "good job, here is a cookie and a silver star on your name" phase?
0 Kudos
TheEndless
Level 10

Re: PNG Encoder for Roku Proof of Concept

"destruk" wrote:
Forget I even commented on this. Nobody gets me, but me. Smiley Happy
There are hundreds of ways to do the same thing for your situations - a little bit of thought would have -
sports teams -
One image with every team logo on it and use roRegion to select the logos you need to match up - while not having to convert the image at all, ever, not once. - Much faster, easier to manage, easier to code.

I think you missed the "on the built-in screens" part. You can't use an roRegion as a poster on the roGridScreen or roPosterScreen or roSpringboardScreen.

You also missed the "performance aside" bit. I was arguing the benefits of being able to create PNGs and JPGs dynamically on the box, preferably natively, not specifically using this library. Constant round trips to your server not only uses up unnecessary bandwidth, it also adds latency to the channel, and extra burden on the server. When you're paying for all of those resources, that's a big deal. Why wouldn't you prefer to use local resources instead, if possible?

None of your other comments address the screenshots, avatars, and error captures scenarios I presented either. There are also other applications, like being able to save the composited state of a screen when transitioning between multiple custom screens, or saving composited background elements, so they don't have to all be individually redrawn on every pass. Like I said, I can think of countless different examples of where this functionality would be useful.
"destruk" wrote:
Does that at all make sense to you guys, or are we still in the "good job, here is a cookie and a silver star on your name" phase?

You said you didn't understand how it could be useful, and I presented a number of scenarios in which it would. If none of those apply to you or foster ideas of other ways you could potentially use it, then so be it, but I think it's incredibly short-sighted of you to think that just because you haven't run across a situation where you'd need such functionality that it's completely useless. I personally have worked on a few projects where I didn't have the luxury of having a backend server that I could put code on to dynamically generate images on the fly for me, in which case something like this (again, performance aside) would have come in very handy. You haven't, and apparently think you never will, so good for you.. here's your feather and your silver star...
My Channels: http://roku.permanence.com - Twitter: @TheEndlessDev
Instant Watch Browser (NetflixIWB), Aquarium Screensaver (AQUARIUM), Clever Clocks Screensaver (CLEVERCLOCKS), iTunes Podcasts (ITPC), My Channels (MYCHANNELS)
0 Kudos
renojim
Community Streaming Expert

Re: PNG Encoder for Roku Proof of Concept

"TheEndless" wrote:
I personally have worked on a few projects where I didn't have the luxury of having a backend server that I could put code on to dynamically generate images on the fly for me, in which case something like this (again, performance aside) would have come in very handy.

+1
Roku Community Streaming Expert

Help others find this answer and click "Accept as Solution."
If you appreciate my answer, maybe give me a Kudo.

I am not a Roku employee.
0 Kudos
destruk
Level 10

Re: PNG Encoder for Roku Proof of Concept

It just seems like an entirely too much amount of work to do something which could easily be incorporated into a core component like - copytojpg, or copytopng to convert bitmap data roku or a server already has direct access to to begin with. Much like why the loopback IP address doesn't work for ECP commands - that's shortsighted, so I'm simply stepping in Roku's shortsighted lead Smiley Happy
0 Kudos
TheEndless
Level 10

Re: PNG Encoder for Roku Proof of Concept

"destruk" wrote:
It just seems like an entirely too much amount of work to do something which could easily be incorporated into a core component like - copytojpg, or copytopng to convert bitmap data roku or a server already has direct access to to begin with.

You won't get any arguments there. It's definitely something that would be best to be implemented in the core. The fact that someone actually took the time to port a PNG library to Brightscript might be enough to convince Roku it's necessary. It eventually happened with the JSON libraries we all put together, so maybe....
My Channels: http://roku.permanence.com - Twitter: @TheEndlessDev
Instant Watch Browser (NetflixIWB), Aquarium Screensaver (AQUARIUM), Clever Clocks Screensaver (CLEVERCLOCKS), iTunes Podcasts (ITPC), My Channels (MYCHANNELS)
0 Kudos
kbenson
Level 7

Re: PNG Encoder for Roku Proof of Concept

Somewhat off topic:

  • I'm getting warm fuzzies about all this. It's awesome that rdPNG has been of use since we put it out.

  • As requested originally (years ago), shift and xor operators/functions from Roku would help a lot.

  • The optimizations found are really interesting. Especially the typed variables. We did preliminary tests around the time we wrote the libraries, and found that for general use types variables were actually slightly slower in some cases that their untyped counterparts. That may have been optimized away in later firmware versions, or the cost of boxing may have made a difference in this case (obviously there are other benefits to typing variables).

  • We seriously considered writing a zlib implemetation originally, but found a workaround for our needs (palettized PNGs, where we just need to set the colors to create different colored PNGs), and we were trying to meet the Roku channel contest deadline for KidPaint (no win, damn you renojim! Smiley Wink


rdPNG was actually created as a way to easily and programmatically access and modify PNG pallete entries. You can actually see the end result in KidPaint, which is itself open sourced and on github (https://github.com/rokudev/kidpaint). It's horribly dated, especially since there's a real roScreen object to use now (in my day, we had to use multiple roImageCanvas object and weird timing quirks to achieve animation, and we did it up-hill both ways while walking to school... Smiley Tongue )

Also, if anyone's interesting in commit bits to the librokudev repo, that can definitely be arranged... Otherwise, we accept pull requests.
-- GandK Labs
Check out Reversi! in the channel store!
0 Kudos
GPF
Level 7

Re: PNG Encoder for Roku Proof of Concept

"TheEndless" wrote:
"destruk" wrote:
It just seems like an entirely too much amount of work to do something which could easily be incorporated into a core component like - copytojpg, or copytopng to convert bitmap data roku or a server already has direct access to to begin with.

You won't get any arguments there. It's definitely something that would be best to be implemented in the core. The fact that someone actually took the time to port a PNG library to Brightscript might be enough to convince Roku it's necessary. It eventually happened with the JSON libraries we all put together, so maybe....


I agree, would be very nice to have. A way to access pixels directly would be even nicer. I originally was looking into it as a way to use a PNG like framebuffer for doing pixel plotting but it is slower then doing a DrawRect(x ,y , 1, 1, &hFF) etc. Also would be nice to have access to an audio buffer for building sound samples, multithreading Smiley Happy Even better would be to just have homebrew access to the 3D roku sdk .

I have done some more work on the encoder and checked my changes into github. I have combined all the loops into one function and added/modified the adler32/crc32 function to take a byte at a time.
https://github.com/GPF/pngEncodeRoku

function IDATChunk(width as integer,height as integer,pixels as object) as object

chunk = CreateObject("roByteArray")

chunk.push(0)'placeholder for idat size
chunk.push(0)'placeholder for idat size
chunk.push(0)'placeholder for idat size
chunk.push(0)'placeholder for idat size

n=ADLER32calc()
c=rdCRC()

y=0
x=0
f=0
BLOCK_SIZE = 32000
zlength=BLOCK_SIZE

id=asc("I"):chunk.push(id):c.updateOneCRC(id)
id=asc("D"):chunk.push(id):c.updateOneCRC(id)
id=asc("A"):chunk.push(id):c.updateOneCRC(id)
id=asc("T"):chunk.push(id):c.updateOneCRC(id)

'Zlib Header
id=8:chunk.push(id):c.updateOneCRC(id):f=f+1 ' CM = 8, CMINFO = 0
id=(31 - ( (8*2^8) MOD 31 ) ) MOD 31:chunk.push(id):c.updateOneCRC(id):f=f+1 ' FCHECK (FDICT/FLEVEL=0)

for i = 0 to pixels.count()-1

if ((y+x) MOD (BLOCK_SIZE)) =0 then

if (( pixels.count()-y) < BLOCK_SIZE) then
zlength=(pixels.count()-y)+(height-x)
id=1:chunk.push(id):c.updateOneCRC(id):f=f+1 ' Final flag, Compression type
print "y= "+y.toStr()
else

id=0:chunk.push(id):c.updateOneCRC(id):f=f+1 ' Final flag, Compression type
print "lasty= "+y.toStr()

endif

print "zlength= "+zlength.toStr()
id=(zlength and &HFF):chunk.push(id):c.updateOneCRC(id):f=f+1 ' Length LSB

id=((zlength and &HFF00)/256):chunk.push(id):c.updateOneCRC(id):f=f+1 ' Length MSB

id=( (NOT zlength) and &HFF):chunk.push(id):c.updateOneCRC(id):f=f+1 ' Length 1st complement LSB

id=( ( (NOT zlength) and &HFF00)/256) ' Length 1st complement MSB
chunk.push(id):c.updateOneCRC(id):f=f+1
endif

if(y MOD (width*4)) =0 then
id=0:chunk.push(id):c.updateOneCRC(id):n.UpdateAdler(id):f=f+1 'no Filter
x=x+1
endif

id=pixels[i]:chunk.push(id):
c.updateOneCRC(id):n.UpdateAdler(id):f=f+1
y=y+1
endfor


ad=n.TotalAdler()
temp = CreateObject("roByteArray")
temp = rdINTtoBA(ad)
id=temp[0]:chunk.push(id):c.updateOneCRC(id):f=f+1
id=temp[1]:chunk.push(id):c.updateOneCRC(id):f=f+1
id=temp[2]:chunk.push(id):c.updateOneCRC(id):f=f+1
id=temp[3]:chunk.push(id):c.updateOneCRC(id):f=f+1

datsize=rdINTtoBA(f) 'idat size
chunk[0]=datsize[0]
chunk[1]=datsize[1]
chunk[2]=datsize[2]
chunk[3]=datsize[3]

chunk.append(rdINTtoBA(not (c.TotalOneCRC() ) ))

return chunk
end function


function ADLER32calc() as object
this = {
'Member vars
s1%:1
s2%:0

'Methods
ResetAdler: function () as integer
m.s1%=1
m.s2%=0
end function
UpdateAdler: function (abs% as integer)
m.s1% = (m.s1% + abs%) MOD 65521
m.s2% = (m.s2% + m.s1%) MOD 65521
end function
TotalAdler: function () as integer
return (m.s2%*65536) + m.s1%
end function
}
return this
end function


	   updateOneCRC: function(buf as integer) 
crc=m.TheCRC
t = m.CRCTABLE
index = ((crc and not buf) or (not crc and buf)) and &hFF
shiftedc = ((crc and &hFFFFFF00)/256) and &hFFFFFF
m.TheCRC= ((shiftedc and not t[index]) or (not shiftedc and t[index]))
end function
TotalOneCRC: function() as integer
return m.TheCRC
end function
0 Kudos
RokuJoel
Roku Employee
Roku Employee

Re: PNG Encoder for Roku Proof of Concept

"GPF" wrote:
Even better would be to just have homebrew access to the 3D roku sdk .


http://unity3d.com/union/

- Joel
0 Kudos
destruk
Level 10

Re: PNG Encoder for Roku Proof of Concept

So Bladeslinger will run on Roku without any issues? wow. Why isn't it in the channel store?
0 Kudos
GPF
Level 7

Re: PNG Encoder for Roku Proof of Concept

I was working on making the CRC32 faster, I found a blog on using a Slicing-by-8 algorithm to process it faster. Right now it doesn't seem any faster to me. Anyway I can use the getSignedLong(n%) to grab 4 bytes at once instead of making 4 seperate calls to GetSignedByte(n%) ?

Also how to I expand the rdXOR(i7%,rdXOR(i6%,rdXOR(i5%,i4%))) call so I can get rid of the function calls overhead?

Thanks,
Troy

' ****************************************************************
' * Calculate the standard 32-bit CRC used by numerous standards *
' * Using the Slicing-by-8 Algorithm on Roku by Troy Davis(GPF) *
' * based off blog on http://create.stephan-brumme.com/crc32/ *
' ****************************************************************
function slice8CRC() as object
this = {

updateSlice8CRC: function(num as integer, buf as object) as integer
crc% = num
lastn% = buf.count() - 1
n%=0
k%=0

while (lastn% >=8)

current0% = rdXOR(buf.GetSignedByte(n%),crc%):n%=n%+1
current1% = rdXOR(buf.GetSignedByte(n%),rdRightShift(crc%,8)):n%=n%+1
current2% = rdXOR(buf.GetSignedByte(n%),rdRightShift(crc%,16)):n%=n%+1
current3% = rdXOR(buf.GetSignedByte(n%),rdRightShift(crc%,24)):n%=n%+1

i7% = m.crc32Lookup[7][current0% and &HFF]
i6% = m.crc32Lookup[6][current1% and &HFF]
i5% = m.crc32Lookup[5][current2% and &HFF]
i4% = m.crc32Lookup[4][current3% and &HFF]

crc%= rdXOR(i7%,rdXOR(i6%,rdXOR(i5%,i4%)))

i3% = m.crc32Lookup[3][buf.GetSignedByte(n%) and &HFF]:n%=n%+1
i2% = m.crc32Lookup[2][buf.GetSignedByte(n%) and &HFF]:n%=n%+1
i1% = m.crc32Lookup[1][buf.GetSignedByte(n%) and &HFF]:n%=n%+1
i0% = m.crc32Lookup[0][buf.GetSignedByte(n%) and &HFF]:n%=n%+1

crc%= rdXOR(crc%,rdXOR(i3%,rdXOR(i2%,rdXOR(i1%,i0%))))

lastn%=lastn%-8
k%=n%
end while

for n% = k% to buf.count() - 1
current% = buf.GetSignedByte(n%)':?n%
index% = ( (crc% and not current%) or (not crc% and current% ) ) and &hFF
shiftedc% = ((crc% and &hFFFFFF00)/256) and &hFFFFFF
crc% = ( (shiftedc% and not m.crc32Lookup[0][index%] ) or (not shiftedc% and m.crc32Lookup[0][index%]))
end for

return crc%
end function

' Member vars
crc32Lookup:[
[
&H00000000,&H77073096,&HEE0E612C,&H990951BA,&H076DC419,&H706AF48F,&HE963A535,&H9E6495A3,
&H0EDB8832,&H79DCB8A4,&HE0D5E91E,&H97D2D988,&H09B64C2B,&H7EB17CBD,&HE7B82D07,&H90BF1D91,
&H1DB71064,&H6AB020F2,&HF3B97148,&H84BE41DE,&H1ADAD47D,&H6DDDE4EB,&HF4D4B551,&H83D385C7,
&H136C9856,&H646BA8C0,&HFD62F97A,&H8A65C9EC,&H14015C4F,&H63066CD9,&HFA0F3D63,&H8D080DF5,
&H3B6E20C8,&H4C69105E,&HD56041E4,&HA2677172,&H3C03E4D1,&H4B04D447,&HD20D85FD,&HA50AB56B,
&H35B5A8FA,&H42B2986C,&HDBBBC9D6,&HACBCF940,&H32D86CE3,&H45DF5C75,&HDCD60DCF,&HABD13D59,
&H26D930AC,&H51DE003A,&HC8D75180,&HBFD06116,&H21B4F4B5,&H56B3C423,&HCFBA9599,&HB8BDA50F,
&H2802B89E,&H5F058808,&HC60CD9B2,&HB10BE924,&H2F6F7C87,&H58684C11,&HC1611DAB,&HB6662D3D,
&H76DC4190,&H01DB7106,&H98D220BC,&HEFD5102A,&H71B18589,&H06B6B51F,&H9FBFE4A5,&HE8B8D433,
&H7807C9A2,&H0F00F934,&H9609A88E,&HE10E9818,&H7F6A0DBB,&H086D3D2D,&H91646C97,&HE6635C01,
&H6B6B51F4,&H1C6C6162,&H856530D8,&HF262004E,&H6C0695ED,&H1B01A57B,&H8208F4C1,&HF50FC457,
&H65B0D9C6,&H12B7E950,&H8BBEB8EA,&HFCB9887C,&H62DD1DDF,&H15DA2D49,&H8CD37CF3,&HFBD44C65,
&H4DB26158,&H3AB551CE,&HA3BC0074,&HD4BB30E2,&H4ADFA541,&H3DD895D7,&HA4D1C46D,&HD3D6F4FB,
&H4369E96A,&H346ED9FC,&HAD678846,&HDA60B8D0,&H44042D73,&H33031DE5,&HAA0A4C5F,&HDD0D7CC9,
&H5005713C,&H270241AA,&HBE0B1010,&HC90C2086,&H5768B525,&H206F85B3,&HB966D409,&HCE61E49F,
&H5EDEF90E,&H29D9C998,&HB0D09822,&HC7D7A8B4,&H59B33D17,&H2EB40D81,&HB7BD5C3B,&HC0BA6CAD,
&HEDB88320,&H9ABFB3B6,&H03B6E20C,&H74B1D29A,&HEAD54739,&H9DD277AF,&H04DB2615,&H73DC1683,
&HE3630B12,&H94643B84,&H0D6D6A3E,&H7A6A5AA8,&HE40ECF0B,&H9309FF9D,&H0A00AE27,&H7D079EB1,
&HF00F9344,&H8708A3D2,&H1E01F268,&H6906C2FE,&HF762575D,&H806567CB,&H196C3671,&H6E6B06E7,
&HFED41B76,&H89D32BE0,&H10DA7A5A,&H67DD4ACC,&HF9B9DF6F,&H8EBEEFF9,&H17B7BE43,&H60B08ED5,
&HD6D6A3E8,&HA1D1937E,&H38D8C2C4,&H4FDFF252,&HD1BB67F1,&HA6BC5767,&H3FB506DD,&H48B2364B,
&HD80D2BDA,&HAF0A1B4C,&H36034AF6,&H41047A60,&HDF60EFC3,&HA867DF55,&H316E8EEF,&H4669BE79,
&HCB61B38C,&HBC66831A,&H256FD2A0,&H5268E236,&HCC0C7795,&HBB0B4703,&H220216B9,&H5505262F,
&HC5BA3BBE,&HB2BD0B28,&H2BB45A92,&H5CB36A04,&HC2D7FFA7,&HB5D0CF31,&H2CD99E8B,&H5BDEAE1D,
&H9B64C2B0,&HEC63F226,&H756AA39C,&H026D930A,&H9C0906A9,&HEB0E363F,&H72076785,&H05005713,
&H95BF4A82,&HE2B87A14,&H7BB12BAE,&H0CB61B38,&H92D28E9B,&HE5D5BE0D,&H7CDCEFB7,&H0BDBDF21,
&H86D3D2D4,&HF1D4E242,&H68DDB3F8,&H1FDA836E,&H81BE16CD,&HF6B9265B,&H6FB077E1,&H18B74777,
&H88085AE6,&HFF0F6A70,&H66063BCA,&H11010B5C,&H8F659EFF,&HF862AE69,&H616BFFD3,&H166CCF45,
&HA00AE278,&HD70DD2EE,&H4E048354,&H3903B3C2,&HA7672661,&HD06016F7,&H4969474D,&H3E6E77DB,
&HAED16A4A,&HD9D65ADC,&H40DF0B66,&H37D83BF0,&HA9BCAE53,&HDEBB9EC5,&H47B2CF7F,&H30B5FFE9,
&HBDBDF21C,&HCABAC28A,&H53B39330,&H24B4A3A6,&HBAD03605,&HCDD70693,&H54DE5729,&H23D967BF,
&HB3667A2E,&HC4614AB8,&H5D681B02,&H2A6F2B94,&HB40BBE37,&HC30C8EA1,&H5A05DF1B,&H2D02EF8D ],
' beyond this point only relevant for Slicing-by-4 and Slicing-By-8
[ &H00000000,&H191B3141,&H32366282,&H2B2D53C3,&H646CC504,&H7D77F445,&H565AA786,&H4F4196C7,
&HC8D98A08,&HD1C2BB49,&HFAEFE88A,&HE3F4D9CB,&HACB54F0C,&HB5AE7E4D,&H9E832D8E,&H87981CCF,
&H4AC21251,&H53D92310,&H78F470D3,&H61EF4192,&H2EAED755,&H37B5E614,&H1C98B5D7,&H05838496,
&H821B9859,&H9B00A918,&HB02DFADB,&HA936CB9A,&HE6775D5D,&HFF6C6C1C,&HD4413FDF,&HCD5A0E9E,
&H958424A2,&H8C9F15E3,&HA7B24620,&HBEA97761,&HF1E8E1A6,&HE8F3D0E7,&HC3DE8324,&HDAC5B265,
&H5D5DAEAA,&H44469FEB,&H6F6BCC28,&H7670FD69,&H39316BAE,&H202A5AEF,&H0B07092C,&H121C386D,
&HDF4636F3,&HC65D07B2,&HED705471,&HF46B6530,&HBB2AF3F7,&HA231C2B6,&H891C9175,&H9007A034,
&H179FBCFB,&H0E848DBA,&H25A9DE79,&H3CB2EF38,&H73F379FF,&H6AE848BE,&H41C51B7D,&H58DE2A3C,
&HF0794F05,&HE9627E44,&HC24F2D87,&HDB541CC6,&H94158A01,&H8D0EBB40,&HA623E883,&HBF38D9C2,
&H38A0C50D,&H21BBF44C,&H0A96A78F,&H138D96CE,&H5CCC0009,&H45D73148,&H6EFA628B,&H77E153CA,
&HBABB5D54,&HA3A06C15,&H888D3FD6,&H91960E97,&HDED79850,&HC7CCA911,&HECE1FAD2,&HF5FACB93,
&H7262D75C,&H6B79E61D,&H4054B5DE,&H594F849F,&H160E1258,&H0F152319,&H243870DA,&H3D23419B,
&H65FD6BA7,&H7CE65AE6,&H57CB0925,&H4ED03864,&H0191AEA3,&H188A9FE2,&H33A7CC21,&H2ABCFD60,
&HAD24E1AF,&HB43FD0EE,&H9F12832D,&H8609B26C,&HC94824AB,&HD05315EA,&HFB7E4629,&HE2657768,
&H2F3F79F6,&H362448B7,&H1D091B74,&H04122A35,&H4B53BCF2,&H52488DB3,&H7965DE70,&H607EEF31,
&HE7E6F3FE,&HFEFDC2BF,&HD5D0917C,&HCCCBA03D,&H838A36FA,&H9A9107BB,&HB1BC5478,&HA8A76539,
&H3B83984B,&H2298A90A,&H09B5FAC9,&H10AECB88,&H5FEF5D4F,&H46F46C0E,&H6DD93FCD,&H74C20E8C,
&HF35A1243,&HEA412302,&HC16C70C1,&HD8774180,&H9736D747,&H8E2DE606,&HA500B5C5,&HBC1B8484,
&H71418A1A,&H685ABB5B,&H4377E898,&H5A6CD9D9,&H152D4F1E,&H0C367E5F,&H271B2D9C,&H3E001CDD,
&HB9980012,&HA0833153,&H8BAE6290,&H92B553D1,&HDDF4C516,&HC4EFF457,&HEFC2A794,&HF6D996D5,
&HAE07BCE9,&HB71C8DA8,&H9C31DE6B,&H852AEF2A,&HCA6B79ED,&HD37048AC,&HF85D1B6F,&HE1462A2E,
&H66DE36E1,&H7FC507A0,&H54E85463,&H4DF36522,&H02B2F3E5,&H1BA9C2A4,&H30849167,&H299FA026,
&HE4C5AEB8,&HFDDE9FF9,&HD6F3CC3A,&HCFE8FD7B,&H80A96BBC,&H99B25AFD,&HB29F093E,&HAB84387F,
&H2C1C24B0,&H350715F1,&H1E2A4632,&H07317773,&H4870E1B4,&H516BD0F5,&H7A468336,&H635DB277,
&HCBFAD74E,&HD2E1E60F,&HF9CCB5CC,&HE0D7848D,&HAF96124A,&HB68D230B,&H9DA070C8,&H84BB4189,
&H03235D46,&H1A386C07,&H31153FC4,&H280E0E85,&H674F9842,&H7E54A903,&H5579FAC0,&H4C62CB81,
&H8138C51F,&H9823F45E,&HB30EA79D,&HAA1596DC,&HE554001B,&HFC4F315A,&HD7626299,&HCE7953D8,
&H49E14F17,&H50FA7E56,&H7BD72D95,&H62CC1CD4,&H2D8D8A13,&H3496BB52,&H1FBBE891,&H06A0D9D0,
&H5E7EF3EC,&H4765C2AD,&H6C48916E,&H7553A02F,&H3A1236E8,&H230907A9,&H0824546A,&H113F652B,
&H96A779E4,&H8FBC48A5,&HA4911B66,&HBD8A2A27,&HF2CBBCE0,&HEBD08DA1,&HC0FDDE62,&HD9E6EF23,
&H14BCE1BD,&H0DA7D0FC,&H268A833F,&H3F91B27E,&H70D024B9,&H69CB15F8,&H42E6463B,&H5BFD777A,
&HDC656BB5,&HC57E5AF4,&HEE530937,&HF7483876,&HB809AEB1,&HA1129FF0,&H8A3FCC33,&H9324FD72 ],
[ &H00000000,&H01C26A37,&H0384D46E,&H0246BE59,&H0709A8DC,&H06CBC2EB,&H048D7CB2,&H054F1685,
&H0E1351B8,&H0FD13B8F,&H0D9785D6,&H0C55EFE1,&H091AF964,&H08D89353,&H0A9E2D0A,&H0B5C473D,
&H1C26A370,&H1DE4C947,&H1FA2771E,&H1E601D29,&H1B2F0BAC,&H1AED619B,&H18ABDFC2,&H1969B5F5,
&H1235F2C8,&H13F798FF,&H11B126A6,&H10734C91,&H153C5A14,&H14FE3023,&H16B88E7A,&H177AE44D,
&H384D46E0,&H398F2CD7,&H3BC9928E,&H3A0BF8B9,&H3F44EE3C,&H3E86840B,&H3CC03A52,&H3D025065,
&H365E1758,&H379C7D6F,&H35DAC336,&H3418A901,&H3157BF84,&H3095D5B3,&H32D36BEA,&H331101DD,
&H246BE590,&H25A98FA7,&H27EF31FE,&H262D5BC9,&H23624D4C,&H22A0277B,&H20E69922,&H2124F315,
&H2A78B428,&H2BBADE1F,&H29FC6046,&H283E0A71,&H2D711CF4,&H2CB376C3,&H2EF5C89A,&H2F37A2AD,
&H709A8DC0,&H7158E7F7,&H731E59AE,&H72DC3399,&H7793251C,&H76514F2B,&H7417F172,&H75D59B45,
&H7E89DC78,&H7F4BB64F,&H7D0D0816,&H7CCF6221,&H798074A4,&H78421E93,&H7A04A0CA,&H7BC6CAFD,
&H6CBC2EB0,&H6D7E4487,&H6F38FADE,&H6EFA90E9,&H6BB5866C,&H6A77EC5B,&H68315202,&H69F33835,
&H62AF7F08,&H636D153F,&H612BAB66,&H60E9C151,&H65A6D7D4,&H6464BDE3,&H662203BA,&H67E0698D,
&H48D7CB20,&H4915A117,&H4B531F4E,&H4A917579,&H4FDE63FC,&H4E1C09CB,&H4C5AB792,&H4D98DDA5,
&H46C49A98,&H4706F0AF,&H45404EF6,&H448224C1,&H41CD3244,&H400F5873,&H4249E62A,&H438B8C1D,
&H54F16850,&H55330267,&H5775BC3E,&H56B7D609,&H53F8C08C,&H523AAABB,&H507C14E2,&H51BE7ED5,
&H5AE239E8,&H5B2053DF,&H5966ED86,&H58A487B1,&H5DEB9134,&H5C29FB03,&H5E6F455A,&H5FAD2F6D,
&HE1351B80,&HE0F771B7,&HE2B1CFEE,&HE373A5D9,&HE63CB35C,&HE7FED96B,&HE5B86732,&HE47A0D05,
&HEF264A38,&HEEE4200F,&HECA29E56,&HED60F461,&HE82FE2E4,&HE9ED88D3,&HEBAB368A,&HEA695CBD,
&HFD13B8F0,&HFCD1D2C7,&HFE976C9E,&HFF5506A9,&HFA1A102C,&HFBD87A1B,&HF99EC442,&HF85CAE75,
&HF300E948,&HF2C2837F,&HF0843D26,&HF1465711,&HF4094194,&HF5CB2BA3,&HF78D95FA,&HF64FFFCD,
&HD9785D60,&HD8BA3757,&HDAFC890E,&HDB3EE339,&HDE71F5BC,&HDFB39F8B,&HDDF521D2,&HDC374BE5,
&HD76B0CD8,&HD6A966EF,&HD4EFD8B6,&HD52DB281,&HD062A404,&HD1A0CE33,&HD3E6706A,&HD2241A5D,
&HC55EFE10,&HC49C9427,&HC6DA2A7E,&HC7184049,&HC25756CC,&HC3953CFB,&HC1D382A2,&HC011E895,
&HCB4DAFA8,&HCA8FC59F,&HC8C97BC6,&HC90B11F1,&HCC440774,&HCD866D43,&HCFC0D31A,&HCE02B92D,
&H91AF9640,&H906DFC77,&H922B422E,&H93E92819,&H96A63E9C,&H976454AB,&H9522EAF2,&H94E080C5,
&H9FBCC7F8,&H9E7EADCF,&H9C381396,&H9DFA79A1,&H98B56F24,&H99770513,&H9B31BB4A,&H9AF3D17D,
&H8D893530,&H8C4B5F07,&H8E0DE15E,&H8FCF8B69,&H8A809DEC,&H8B42F7DB,&H89044982,&H88C623B5,
&H839A6488,&H82580EBF,&H801EB0E6,&H81DCDAD1,&H8493CC54,&H8551A663,&H8717183A,&H86D5720D,
&HA9E2D0A0,&HA820BA97,&HAA6604CE,&HABA46EF9,&HAEEB787C,&HAF29124B,&HAD6FAC12,&HACADC625,
&HA7F18118,&HA633EB2F,&HA4755576,&HA5B73F41,&HA0F829C4,&HA13A43F3,&HA37CFDAA,&HA2BE979D,
&HB5C473D0,&HB40619E7,&HB640A7BE,&HB782CD89,&HB2CDDB0C,&HB30FB13B,&HB1490F62,&HB08B6555,
&HBBD72268,&HBA15485F,&HB853F606,&HB9919C31,&HBCDE8AB4,&HBD1CE083,&HBF5A5EDA,&HBE9834ED ],
[ &H00000000,&HB8BC6765,&HAA09C88B,&H12B5AFEE,&H8F629757,&H37DEF032,&H256B5FDC,&H9DD738B9,
&HC5B428EF,&H7D084F8A,&H6FBDE064,&HD7018701,&H4AD6BFB8,&HF26AD8DD,&HE0DF7733,&H58631056,
&H5019579F,&HE8A530FA,&HFA109F14,&H42ACF871,&HDF7BC0C8,&H67C7A7AD,&H75720843,&HCDCE6F26,
&H95AD7F70,&H2D111815,&H3FA4B7FB,&H8718D09E,&H1ACFE827,&HA2738F42,&HB0C620AC,&H087A47C9,
&HA032AF3E,&H188EC85B,&H0A3B67B5,&HB28700D0,&H2F503869,&H97EC5F0C,&H8559F0E2,&H3DE59787,
&H658687D1,&HDD3AE0B4,&HCF8F4F5A,&H7733283F,&HEAE41086,&H525877E3,&H40EDD80D,&HF851BF68,
&HF02BF8A1,&H48979FC4,&H5A22302A,&HE29E574F,&H7F496FF6,&HC7F50893,&HD540A77D,&H6DFCC018,
&H359FD04E,&H8D23B72B,&H9F9618C5,&H272A7FA0,&HBAFD4719,&H0241207C,&H10F48F92,&HA848E8F7,
&H9B14583D,&H23A83F58,&H311D90B6,&H89A1F7D3,&H1476CF6A,&HACCAA80F,&HBE7F07E1,&H06C36084,
&H5EA070D2,&HE61C17B7,&HF4A9B859,&H4C15DF3C,&HD1C2E785,&H697E80E0,&H7BCB2F0E,&HC377486B,
&HCB0D0FA2,&H73B168C7,&H6104C729,&HD9B8A04C,&H446F98F5,&HFCD3FF90,&HEE66507E,&H56DA371B,
&H0EB9274D,&HB6054028,&HA4B0EFC6,&H1C0C88A3,&H81DBB01A,&H3967D77F,&H2BD27891,&H936E1FF4,
&H3B26F703,&H839A9066,&H912F3F88,&H299358ED,&HB4446054,&H0CF80731,&H1E4DA8DF,&HA6F1CFBA,
&HFE92DFEC,&H462EB889,&H549B1767,&HEC277002,&H71F048BB,&HC94C2FDE,&HDBF98030,&H6345E755,
&H6B3FA09C,&HD383C7F9,&HC1366817,&H798A0F72,&HE45D37CB,&H5CE150AE,&H4E54FF40,&HF6E89825,
&HAE8B8873,&H1637EF16,&H048240F8,&HBC3E279D,&H21E91F24,&H99557841,&H8BE0D7AF,&H335CB0CA,
&HED59B63B,&H55E5D15E,&H47507EB0,&HFFEC19D5,&H623B216C,&HDA874609,&HC832E9E7,&H708E8E82,
&H28ED9ED4,&H9051F9B1,&H82E4565F,&H3A58313A,&HA78F0983,&H1F336EE6,&H0D86C108,&HB53AA66D,
&HBD40E1A4,&H05FC86C1,&H1749292F,&HAFF54E4A,&H322276F3,&H8A9E1196,&H982BBE78,&H2097D91D,
&H78F4C94B,&HC048AE2E,&HD2FD01C0,&H6A4166A5,&HF7965E1C,&H4F2A3979,&H5D9F9697,&HE523F1F2,
&H4D6B1905,&HF5D77E60,&HE762D18E,&H5FDEB6EB,&HC2098E52,&H7AB5E937,&H680046D9,&HD0BC21BC,
&H88DF31EA,&H3063568F,&H22D6F961,&H9A6A9E04,&H07BDA6BD,&HBF01C1D8,&HADB46E36,&H15080953,
&H1D724E9A,&HA5CE29FF,&HB77B8611,&H0FC7E174,&H9210D9CD,&H2AACBEA8,&H38191146,&H80A57623,
&HD8C66675,&H607A0110,&H72CFAEFE,&HCA73C99B,&H57A4F122,&HEF189647,&HFDAD39A9,&H45115ECC,
&H764DEE06,&HCEF18963,&HDC44268D,&H64F841E8,&HF92F7951,&H41931E34,&H5326B1DA,&HEB9AD6BF,
&HB3F9C6E9,&H0B45A18C,&H19F00E62,&HA14C6907,&H3C9B51BE,&H842736DB,&H96929935,&H2E2EFE50,
&H2654B999,&H9EE8DEFC,&H8C5D7112,&H34E11677,&HA9362ECE,&H118A49AB,&H033FE645,&HBB838120,
&HE3E09176,&H5B5CF613,&H49E959FD,&HF1553E98,&H6C820621,&HD43E6144,&HC68BCEAA,&H7E37A9CF,
&HD67F4138,&H6EC3265D,&H7C7689B3,&HC4CAEED6,&H591DD66F,&HE1A1B10A,&HF3141EE4,&H4BA87981,
&H13CB69D7,&HAB770EB2,&HB9C2A15C,&H017EC639,&H9CA9FE80,&H241599E5,&H36A0360B,&H8E1C516E,
&H866616A7,&H3EDA71C2,&H2C6FDE2C,&H94D3B949,&H090481F0,&HB1B8E695,&HA30D497B,&H1BB12E1E,
&H43D23E48,&HFB6E592D,&HE9DBF6C3,&H516791A6,&HCCB0A91F,&H740CCE7A,&H66B96194,&HDE0506F1 ],
' beyond this point only relevant for Slicing-By-8
[ &H00000000,&H3D6029B0,&H7AC05360,&H47A07AD0,&HF580A6C0,&HC8E08F70,&H8F40F5A0,&HB220DC10,
&H30704BC1,&H0D106271,&H4AB018A1,&H77D03111,&HC5F0ED01,&HF890C4B1,&HBF30BE61,&H825097D1,
&H60E09782,&H5D80BE32,&H1A20C4E2,&H2740ED52,&H95603142,&HA80018F2,&HEFA06222,&HD2C04B92,
&H5090DC43,&H6DF0F5F3,&H2A508F23,&H1730A693,&HA5107A83,&H98705333,&HDFD029E3,&HE2B00053,
&HC1C12F04,&HFCA106B4,&HBB017C64,&H866155D4,&H344189C4,&H0921A074,&H4E81DAA4,&H73E1F314,
&HF1B164C5,&HCCD14D75,&H8B7137A5,&HB6111E15,&H0431C205,&H3951EBB5,&H7EF19165,&H4391B8D5,
&HA121B886,&H9C419136,&HDBE1EBE6,&HE681C256,&H54A11E46,&H69C137F6,&H2E614D26,&H13016496,
&H9151F347,&HAC31DAF7,&HEB91A027,&HD6F18997,&H64D15587,&H59B17C37,&H1E1106E7,&H23712F57,
&H58F35849,&H659371F9,&H22330B29,&H1F532299,&HAD73FE89,&H9013D739,&HD7B3ADE9,&HEAD38459,
&H68831388,&H55E33A38,&H124340E8,&H2F236958,&H9D03B548,&HA0639CF8,&HE7C3E628,&HDAA3CF98,
&H3813CFCB,&H0573E67B,&H42D39CAB,&H7FB3B51B,&HCD93690B,&HF0F340BB,&HB7533A6B,&H8A3313DB,
&H0863840A,&H3503ADBA,&H72A3D76A,&H4FC3FEDA,&HFDE322CA,&HC0830B7A,&H872371AA,&HBA43581A,
&H9932774D,&HA4525EFD,&HE3F2242D,&HDE920D9D,&H6CB2D18D,&H51D2F83D,&H167282ED,&H2B12AB5D,
&HA9423C8C,&H9422153C,&HD3826FEC,&HEEE2465C,&H5CC29A4C,&H61A2B3FC,&H2602C92C,&H1B62E09C,
&HF9D2E0CF,&HC4B2C97F,&H8312B3AF,&HBE729A1F,&H0C52460F,&H31326FBF,&H7692156F,&H4BF23CDF,
&HC9A2AB0E,&HF4C282BE,&HB362F86E,&H8E02D1DE,&H3C220DCE,&H0142247E,&H46E25EAE,&H7B82771E,
&HB1E6B092,&H8C869922,&HCB26E3F2,&HF646CA42,&H44661652,&H79063FE2,&H3EA64532,&H03C66C82,
&H8196FB53,&HBCF6D2E3,&HFB56A833,&HC6368183,&H74165D93,&H49767423,&H0ED60EF3,&H33B62743,
&HD1062710,&HEC660EA0,&HABC67470,&H96A65DC0,&H248681D0,&H19E6A860,&H5E46D2B0,&H6326FB00,
&HE1766CD1,&HDC164561,&H9BB63FB1,&HA6D61601,&H14F6CA11,&H2996E3A1,&H6E369971,&H5356B0C1,
&H70279F96,&H4D47B626,&H0AE7CCF6,&H3787E546,&H85A73956,&HB8C710E6,&HFF676A36,&HC2074386,
&H4057D457,&H7D37FDE7,&H3A978737,&H07F7AE87,&HB5D77297,&H88B75B27,&HCF1721F7,&HF2770847,
&H10C70814,&H2DA721A4,&H6A075B74,&H576772C4,&HE547AED4,&HD8278764,&H9F87FDB4,&HA2E7D404,
&H20B743D5,&H1DD76A65,&H5A7710B5,&H67173905,&HD537E515,&HE857CCA5,&HAFF7B675,&H92979FC5,
&HE915E8DB,&HD475C16B,&H93D5BBBB,&HAEB5920B,&H1C954E1B,&H21F567AB,&H66551D7B,&H5B3534CB,
&HD965A31A,&HE4058AAA,&HA3A5F07A,&H9EC5D9CA,&H2CE505DA,&H11852C6A,&H562556BA,&H6B457F0A,
&H89F57F59,&HB49556E9,&HF3352C39,&HCE550589,&H7C75D999,&H4115F029,&H06B58AF9,&H3BD5A349,
&HB9853498,&H84E51D28,&HC34567F8,&HFE254E48,&H4C059258,&H7165BBE8,&H36C5C138,&H0BA5E888,
&H28D4C7DF,&H15B4EE6F,&H521494BF,&H6F74BD0F,&HDD54611F,&HE03448AF,&HA794327F,&H9AF41BCF,
&H18A48C1E,&H25C4A5AE,&H6264DF7E,&H5F04F6CE,&HED242ADE,&HD044036E,&H97E479BE,&HAA84500E,
&H4834505D,&H755479ED,&H32F4033D,&H0F942A8D,&HBDB4F69D,&H80D4DF2D,&HC774A5FD,&HFA148C4D,
&H78441B9C,&H4524322C,&H028448FC,&H3FE4614C,&H8DC4BD5C,&HB0A494EC,&HF704EE3C,&HCA64C78C ],
[ &H00000000,&HCB5CD3A5,&H4DC8A10B,&H869472AE,&H9B914216,&H50CD91B3,&HD659E31D,&H1D0530B8,
&HEC53826D,&H270F51C8,&HA19B2366,&H6AC7F0C3,&H77C2C07B,&HBC9E13DE,&H3A0A6170,&HF156B2D5,
&H03D6029B,&HC88AD13E,&H4E1EA390,&H85427035,&H9847408D,&H531B9328,&HD58FE186,&H1ED33223,
&HEF8580F6,&H24D95353,&HA24D21FD,&H6911F258,&H7414C2E0,&HBF481145,&H39DC63EB,&HF280B04E,
&H07AC0536,&HCCF0D693,&H4A64A43D,&H81387798,&H9C3D4720,&H57619485,&HD1F5E62B,&H1AA9358E,
&HEBFF875B,&H20A354FE,&HA6372650,&H6D6BF5F5,&H706EC54D,&HBB3216E8,&H3DA66446,&HF6FAB7E3,
&H047A07AD,&HCF26D408,&H49B2A6A6,&H82EE7503,&H9FEB45BB,&H54B7961E,&HD223E4B0,&H197F3715,
&HE82985C0,&H23755665,&HA5E124CB,&H6EBDF76E,&H73B8C7D6,&HB8E41473,&H3E7066DD,&HF52CB578,
&H0F580A6C,&HC404D9C9,&H4290AB67,&H89CC78C2,&H94C9487A,&H5F959BDF,&HD901E971,&H125D3AD4,
&HE30B8801,&H28575BA4,&HAEC3290A,&H659FFAAF,&H789ACA17,&HB3C619B2,&H35526B1C,&HFE0EB8B9,
&H0C8E08F7,&HC7D2DB52,&H4146A9FC,&H8A1A7A59,&H971F4AE1,&H5C439944,&HDAD7EBEA,&H118B384F,
&HE0DD8A9A,&H2B81593F,&HAD152B91,&H6649F834,&H7B4CC88C,&HB0101B29,&H36846987,&HFDD8BA22,
&H08F40F5A,&HC3A8DCFF,&H453CAE51,&H8E607DF4,&H93654D4C,&H58399EE9,&HDEADEC47,&H15F13FE2,
&HE4A78D37,&H2FFB5E92,&HA96F2C3C,&H6233FF99,&H7F36CF21,&HB46A1C84,&H32FE6E2A,&HF9A2BD8F,
&H0B220DC1,&HC07EDE64,&H46EAACCA,&H8DB67F6F,&H90B34FD7,&H5BEF9C72,&HDD7BEEDC,&H16273D79,
&HE7718FAC,&H2C2D5C09,&HAAB92EA7,&H61E5FD02,&H7CE0CDBA,&HB7BC1E1F,&H31286CB1,&HFA74BF14,
&H1EB014D8,&HD5ECC77D,&H5378B5D3,&H98246676,&H852156CE,&H4E7D856B,&HC8E9F7C5,&H03B52460,
&HF2E396B5,&H39BF4510,&HBF2B37BE,&H7477E41B,&H6972D4A3,&HA22E0706,&H24BA75A8,&HEFE6A60D,
&H1D661643,&HD63AC5E6,&H50AEB748,&H9BF264ED,&H86F75455,&H4DAB87F0,&HCB3FF55E,&H006326FB,
&HF135942E,&H3A69478B,&HBCFD3525,&H77A1E680,&H6AA4D638,&HA1F8059D,&H276C7733,&HEC30A496,
&H191C11EE,&HD240C24B,&H54D4B0E5,&H9F886340,&H828D53F8,&H49D1805D,&HCF45F2F3,&H04192156,
&HF54F9383,&H3E134026,&HB8873288,&H73DBE12D,&H6EDED195,&HA5820230,&H2316709E,&HE84AA33B,
&H1ACA1375,&HD196C0D0,&H5702B27E,&H9C5E61DB,&H815B5163,&H4A0782C6,&HCC93F068,&H07CF23CD,
&HF6999118,&H3DC542BD,&HBB513013,&H700DE3B6,&H6D08D30E,&HA65400AB,&H20C07205,&HEB9CA1A0,
&H11E81EB4,&HDAB4CD11,&H5C20BFBF,&H977C6C1A,&H8A795CA2,&H41258F07,&HC7B1FDA9,&H0CED2E0C,
&HFDBB9CD9,&H36E74F7C,&HB0733DD2,&H7B2FEE77,&H662ADECF,&HAD760D6A,&H2BE27FC4,&HE0BEAC61,
&H123E1C2F,&HD962CF8A,&H5FF6BD24,&H94AA6E81,&H89AF5E39,&H42F38D9C,&HC467FF32,&H0F3B2C97,
&HFE6D9E42,&H35314DE7,&HB3A53F49,&H78F9ECEC,&H65FCDC54,&HAEA00FF1,&H28347D5F,&HE368AEFA,
&H16441B82,&HDD18C827,&H5B8CBA89,&H90D0692C,&H8DD55994,&H46898A31,&HC01DF89F,&H0B412B3A,
&HFA1799EF,&H314B4A4A,&HB7DF38E4,&H7C83EB41,&H6186DBF9,&HAADA085C,&H2C4E7AF2,&HE712A957,
&H15921919,&HDECECABC,&H585AB812,&H93066BB7,&H8E035B0F,&H455F88AA,&HC3CBFA04,&H089729A1,
&HF9C19B74,&H329D48D1,&HB4093A7F,&H7F55E9DA,&H6250D962,&HA90C0AC7,&H2F987869,&HE4C4ABCC ],
[ &H00000000,&HA6770BB4,&H979F1129,&H31E81A9D,&HF44F2413,&H52382FA7,&H63D0353A,&HC5A73E8E,
&H33EF4E67,&H959845D3,&HA4705F4E,&H020754FA,&HC7A06A74,&H61D761C0,&H503F7B5D,&HF64870E9,
&H67DE9CCE,&HC1A9977A,&HF0418DE7,&H56368653,&H9391B8DD,&H35E6B369,&H040EA9F4,&HA279A240,
&H5431D2A9,&HF246D91D,&HC3AEC380,&H65D9C834,&HA07EF6BA,&H0609FD0E,&H37E1E793,&H9196EC27,
&HCFBD399C,&H69CA3228,&H582228B5,&HFE552301,&H3BF21D8F,&H9D85163B,&HAC6D0CA6,&H0A1A0712,
&HFC5277FB,&H5A257C4F,&H6BCD66D2,&HCDBA6D66,&H081D53E8,&HAE6A585C,&H9F8242C1,&H39F54975,
&HA863A552,&H0E14AEE6,&H3FFCB47B,&H998BBFCF,&H5C2C8141,&HFA5B8AF5,&HCBB39068,&H6DC49BDC,
&H9B8CEB35,&H3DFBE081,&H0C13FA1C,&HAA64F1A8,&H6FC3CF26,&HC9B4C492,&HF85CDE0F,&H5E2BD5BB,
&H440B7579,&HE27C7ECD,&HD3946450,&H75E36FE4,&HB044516A,&H16335ADE,&H27DB4043,&H81AC4BF7,
&H77E43B1E,&HD19330AA,&HE07B2A37,&H460C2183,&H83AB1F0D,&H25DC14B9,&H14340E24,&HB2430590,
&H23D5E9B7,&H85A2E203,&HB44AF89E,&H123DF32A,&HD79ACDA4,&H71EDC610,&H4005DC8D,&HE672D739,
&H103AA7D0,&HB64DAC64,&H87A5B6F9,&H21D2BD4D,&HE47583C3,&H42028877,&H73EA92EA,&HD59D995E,
&H8BB64CE5,&H2DC14751,&H1C295DCC,&HBA5E5678,&H7FF968F6,&HD98E6342,&HE86679DF,&H4E11726B,
&HB8590282,&H1E2E0936,&H2FC613AB,&H89B1181F,&H4C162691,&HEA612D25,&HDB8937B8,&H7DFE3C0C,
&HEC68D02B,&H4A1FDB9F,&H7BF7C102,&HDD80CAB6,&H1827F438,&HBE50FF8C,&H8FB8E511,&H29CFEEA5,
&HDF879E4C,&H79F095F8,&H48188F65,&HEE6F84D1,&H2BC8BA5F,&H8DBFB1EB,&HBC57AB76,&H1A20A0C2,
&H8816EAF2,&H2E61E146,&H1F89FBDB,&HB9FEF06F,&H7C59CEE1,&HDA2EC555,&HEBC6DFC8,&H4DB1D47C,
&HBBF9A495,&H1D8EAF21,&H2C66B5BC,&H8A11BE08,&H4FB68086,&HE9C18B32,&HD82991AF,&H7E5E9A1B,
&HEFC8763C,&H49BF7D88,&H78576715,&HDE206CA1,&H1B87522F,&HBDF0599B,&H8C184306,&H2A6F48B2,
&HDC27385B,&H7A5033EF,&H4BB82972,&HEDCF22C6,&H28681C48,&H8E1F17FC,&HBFF70D61,&H198006D5,
&H47ABD36E,&HE1DCD8DA,&HD034C247,&H7643C9F3,&HB3E4F77D,&H1593FCC9,&H247BE654,&H820CEDE0,
&H74449D09,&HD23396BD,&HE3DB8C20,&H45AC8794,&H800BB91A,&H267CB2AE,&H1794A833,&HB1E3A387,
&H20754FA0,&H86024414,&HB7EA5E89,&H119D553D,&HD43A6BB3,&H724D6007,&H43A57A9A,&HE5D2712E,
&H139A01C7,&HB5ED0A73,&H840510EE,&H22721B5A,&HE7D525D4,&H41A22E60,&H704A34FD,&HD63D3F49,
&HCC1D9F8B,&H6A6A943F,&H5B828EA2,&HFDF58516,&H3852BB98,&H9E25B02C,&HAFCDAAB1,&H09BAA105,
&HFFF2D1EC,&H5985DA58,&H686DC0C5,&HCE1ACB71,&H0BBDF5FF,&HADCAFE4B,&H9C22E4D6,&H3A55EF62,
&HABC30345,&H0DB408F1,&H3C5C126C,&H9A2B19D8,&H5F8C2756,&HF9FB2CE2,&HC813367F,&H6E643DCB,
&H982C4D22,&H3E5B4696,&H0FB35C0B,&HA9C457BF,&H6C636931,&HCA146285,&HFBFC7818,&H5D8B73AC,
&H03A0A617,&HA5D7ADA3,&H943FB73E,&H3248BC8A,&HF7EF8204,&H519889B0,&H6070932D,&HC6079899,
&H304FE870,&H9638E3C4,&HA7D0F959,&H01A7F2ED,&HC400CC63,&H6277C7D7,&H539FDD4A,&HF5E8D6FE,
&H647E3AD9,&HC209316D,&HF3E12BF0,&H55962044,&H90311ECA,&H3646157E,&H07AE0FE3,&HA1D90457,
&H579174BE,&HF1E67F0A,&HC00E6597,&H66796E23,&HA3DE50AD,&H05A95B19,&H34414184,&H92364A30 ],
[ &H00000000,&HCCAA009E,&H4225077D,&H8E8F07E3,&H844A0EFA,&H48E00E64,&HC66F0987,&H0AC50919,
&HD3E51BB5,&H1F4F1B2B,&H91C01CC8,&H5D6A1C56,&H57AF154F,&H9B0515D1,&H158A1232,&HD92012AC,
&H7CBB312B,&HB01131B5,&H3E9E3656,&HF23436C8,&HF8F13FD1,&H345B3F4F,&HBAD438AC,&H767E3832,
&HAF5E2A9E,&H63F42A00,&HED7B2DE3,&H21D12D7D,&H2B142464,&HE7BE24FA,&H69312319,&HA59B2387,
&HF9766256,&H35DC62C8,&HBB53652B,&H77F965B5,&H7D3C6CAC,&HB1966C32,&H3F196BD1,&HF3B36B4F,
&H2A9379E3,&HE639797D,&H68B67E9E,&HA41C7E00,&HAED97719,&H62737787,&HECFC7064,&H205670FA,
&H85CD537D,&H496753E3,&HC7E85400,&H0B42549E,&H01875D87,&HCD2D5D19,&H43A25AFA,&H8F085A64,
&H562848C8,&H9A824856,&H140D4FB5,&HD8A74F2B,&HD2624632,&H1EC846AC,&H9047414F,&H5CED41D1,
&H299DC2ED,&HE537C273,&H6BB8C590,&HA712C50E,&HADD7CC17,&H617DCC89,&HEFF2CB6A,&H2358CBF4,
&HFA78D958,&H36D2D9C6,&HB85DDE25,&H74F7DEBB,&H7E32D7A2,&HB298D73C,&H3C17D0DF,&HF0BDD041,
&H5526F3C6,&H998CF358,&H1703F4BB,&HDBA9F425,&HD16CFD3C,&H1DC6FDA2,&H9349FA41,&H5FE3FADF,
&H86C3E873,&H4A69E8ED,&HC4E6EF0E,&H084CEF90,&H0289E689,&HCE23E617,&H40ACE1F4,&H8C06E16A,
&HD0EBA0BB,&H1C41A025,&H92CEA7C6,&H5E64A758,&H54A1AE41,&H980BAEDF,&H1684A93C,&HDA2EA9A2,
&H030EBB0E,&HCFA4BB90,&H412BBC73,&H8D81BCED,&H8744B5F4,&H4BEEB56A,&HC561B289,&H09CBB217,
&HAC509190,&H60FA910E,&HEE7596ED,&H22DF9673,&H281A9F6A,&HE4B09FF4,&H6A3F9817,&HA6959889,
&H7FB58A25,&HB31F8ABB,&H3D908D58,&HF13A8DC6,&HFBFF84DF,&H37558441,&HB9DA83A2,&H7570833C,
&H533B85DA,&H9F918544,&H111E82A7,&HDDB48239,&HD7718B20,&H1BDB8BBE,&H95548C5D,&H59FE8CC3,
&H80DE9E6F,&H4C749EF1,&HC2FB9912,&H0E51998C,&H04949095,&HC83E900B,&H46B197E8,&H8A1B9776,
&H2F80B4F1,&HE32AB46F,&H6DA5B38C,&HA10FB312,&HABCABA0B,&H6760BA95,&HE9EFBD76,&H2545BDE8,
&HFC65AF44,&H30CFAFDA,&HBE40A839,&H72EAA8A7,&H782FA1BE,&HB485A120,&H3A0AA6C3,&HF6A0A65D,
&HAA4DE78C,&H66E7E712,&HE868E0F1,&H24C2E06F,&H2E07E976,&HE2ADE9E8,&H6C22EE0B,&HA088EE95,
&H79A8FC39,&HB502FCA7,&H3B8DFB44,&HF727FBDA,&HFDE2F2C3,&H3148F25D,&HBFC7F5BE,&H736DF520,
&HD6F6D6A7,&H1A5CD639,&H94D3D1DA,&H5879D144,&H52BCD85D,&H9E16D8C3,&H1099DF20,&HDC33DFBE,
&H0513CD12,&HC9B9CD8C,&H4736CA6F,&H8B9CCAF1,&H8159C3E8,&H4DF3C376,&HC37CC495,&H0FD6C40B,
&H7AA64737,&HB60C47A9,&H3883404A,&HF42940D4,&HFEEC49CD,&H32464953,&HBCC94EB0,&H70634E2E,
&HA9435C82,&H65E95C1C,&HEB665BFF,&H27CC5B61,&H2D095278,&HE1A352E6,&H6F2C5505,&HA386559B,
&H061D761C,&HCAB77682,&H44387161,&H889271FF,&H825778E6,&H4EFD7878,&HC0727F9B,&H0CD87F05,
&HD5F86DA9,&H19526D37,&H97DD6AD4,&H5B776A4A,&H51B26353,&H9D1863CD,&H1397642E,&HDF3D64B0,
&H83D02561,&H4F7A25FF,&HC1F5221C,&H0D5F2282,&H079A2B9B,&HCB302B05,&H45BF2CE6,&H89152C78,
&H50353ED4,&H9C9F3E4A,&H121039A9,&HDEBA3937,&HD47F302E,&H18D530B0,&H965A3753,&H5AF037CD,
&HFF6B144A,&H33C114D4,&HBD4E1337,&H71E413A9,&H7B211AB0,&HB78B1A2E,&H39041DCD,&HF5AE1D53,
&H2C8E0FFF,&HE0240F61,&H6EAB0882,&HA201081C,&HA8C40105,&H646E019B,&HEAE10678,&H264B06E6 ]
]
precomputed: true
previousCrc32: 0

populateTable: function() as boolean

precomputed=true
return precomputed
end function



}

return this
end function
0 Kudos