Bloom filter Class

Share your advanced PureBasic knowledge/code with the community.
User avatar
idle
Always Here
Always Here
Posts: 5915
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Bloom filter Class

Post by idle »

Bloom Filter Class

Bloom filters are very simple structure but getting them fast with accurate results isn't!
You will need to verify that the Filter performs for your given inputs, though it should be fine as it is.
While a Bloom is typically an O(k) as in constant time, this one employs a short circuit look up so is really O(1)

Indicative times from 2GHz system

with errors allowed

Add rates are ~800,000 items per second
look up rates ~1,400,000 items per second

with out errors
add rates are ~400,000 items per second
look up rates ~1,300,000 items per second
*Note even with an error rate of 0.0, it's still possible to get an error
currently it's only good for ~10,000,000 items with 4 keys and then it's not really tested much

What is a bloom filter? Why would you want one? What can you do with them?
http://en.wikipedia.org/wiki/Bloom_filter


Uses: AntiVirus scanners, DataBase lookups, Spell checkers, P2P apps, Caches
The real boon about them is that they're compact and extremely fast.

You can also use them in networked games, did player A trigger something at x,y,z

Code: Select all

;Idlearts bloom filter  
;Class Gen Macro
Macro e(e=o):EndMacr#e:EndMacro:Macro m():Macro :e()
m()ss(n):Structure n:e():m()es():EndStructure:e():m()param(p):,p:e():m()ClassPointer(n,pointer):pointer.m_#n :e()
m()ClassStructure(Class):ss(m_#class):*vt :e():m()ClassPrototypes(Class):es():Interface Class#_obj:Destroy(*obj):e()
m()ClassMethods(Class):EndInterface:Procedure new_#class(*obj.m_#class):*obj = AllocateMemory(SizeOf(m_#class))
If *obj: *obj\vt=?class#_vt: EndIf :ProcedureReturn *obj : EndProcedure:Procedure Destroy_#class(*obj):If *obj:
ClearStructure(*obj, m_#class): FreeMemory(*obj)
*obj=0:EndIf:EndProcedure:EndMacro:m()AddressTable(Class):DataSection:Class#_vt::Data.i @Destroy_#Class():e()
m()pFunc(Class,function):Data.i @function#_#class#():e():m()EndClass():EndDataSection:e()
m()PublicMethod(Class,name,type,params):Procedure type name#_#class#(*this.m_#class, params):e()
m()EndMethod():EndProcedure:e():m()PublicReturn:ProcedureReturn:e():m()Private:Protected:e()
m()ClassFunc(n,func): *this\func#_#n :e()

;Class Builder Macro 
Macro Class(n,Struct,Proto,Methods,Table)
 ClassStructure(n)
   struct 
 ClassPrototypes(n)  
   proto 
 ClassMethods(n)
   methods 
 AddressTable(n) 
   table 
 Endclass();) Remove the comment to dump the generated Class use right click select all copy   
EndMacro

;Bloom Filter Class Useage 
;
;1) BloomFilter(clsBloom)        ;Creates the Class named ClsBloom

;2) Global Bloom1.ClsBloom_obj   ;Define a pointer to the Class  
;     
;3) Bloom1 = New_ClsBloom(@Bloom1)  ;Create the Class Instance 
;
;4) Bloom1\Create(number of items,number of keys,error percent)
;   *Note if error rate is set 0.0 it is still posible for it to generate an error should be ok for 10,000,000 items 

;Functions 
;
;Bloom1\Add(string) or Bloom1\Add("",*mem,sizeof(mem))

;Bloom1\Check(string) or Bloom1\Check("",*mem,sizeof(mem)) 

;Bloom1\Merge(ClassPointer) eg Bloom2 
;Merges filter 2 into filter 1 note filters must be the same size   

;Bloom1\Merge(ClassPointer,Start,Length)   
;Start = start merge from an offset in filter, the length to merge  
;
;Bloom1\Clear() Zero the filter (windows only)  
;Bloom1\Free() Must be called to free the allocated memory 
;Bloom1\Destroy() Must be called to Destroy the Class 

EnableASM

#FNV_1 = 2166136261
#FNV_0 = 0
Procedure.q FNV32(*tdata.i, len.i,fnvt)

MOV esi, *tdata      ;esi = ptr to buffer
MOV ecx, len         ;ecx = length of buffer (counter)
MOV eax, fnvt        ;2166136261  ;eax;offset_basis  ;set to 0 for FNV-0, or 2166136261 for FNV-1
MOV edi, 16777619    ;0x01000193  ;FNV_32_PRIME = 16777619
XOr ebx, ebx         ;ebx = 0
! ntbyte:
MUL edi              ;eax = eax * FNV_32_PRIME
MOV bl, [esi]        ;bl = byte from esi
XOr eax, ebx         ;al = al xor bl
INC esi              ;esi = esi + 1 (buffer pos)
DEC ecx              ;ecx = ecx - 1 (counter)
JNZ ntbyte           ;if ecx is 0, jmp to NextByte

ProcedureReturn
EndProcedure 

DisableASM 

;The Bloom Filter Class Description
 
Macro bloomStruct(n)
  bloomSize.i
  mBloomSize.i
  nKeys.i
  er.f
  *bloom
  *bloom1
  errorless.i
EndMacro 
 
Macro Prototypes(n)
   
  Free.i()
  Create.f(size.f,nKeys.f,er.f)
  Add.i(key.s,*mem=0,len=0)
  Check.i(key.s,*mem=0,len=0)
  Merge.i(ClassPointer(n,*pbloom),Start.i=0,len.i=0) 
  Clear.i()
  Fill.i(*mem.i,size.i)
  Export.i(*mem.i,size.i)
  Save.i(file.s)
EndMacro 
 
Macro Methods(n)

  PublicMethod(n,Free,.i,*null)
  
    If *this\bloom
      FreeMemory(*this\bloom)
      *this\bloom = 0
      If *this\bloom1
         FreeMemory(*this\bloom1)
         *this\bloom1=0
      EndIf    
      
    EndIf
     
  Endmethod() 

  PublicMethod(n,Create,.f,size.f param(nKeys.f) param(er.f))
    private ts.f  
    If er = 0.0
      er = 0.001 ;errorless mode only good for less than 10,000,000 items 
      *this\errorless = 1
    EndIf    
    
    *this\bloomsize = (-(nkeys * (size))) / (Log(1 - Pow((er/100),1/nkeys )))/8 
    *this\nkeys = nkeys
    *this\er = er
    *this\mbloomsize = *this\bloomsize * 8 
    *this\bloom = AllocateMemory(*this\bloomsize)
    ts.f = *this\bloomsize
    
    If *this\errorless
      *this\bloom1 = AllocateMemory(*this\bloomsize)
      ts*2
    EndIf 
    
    PublicReturn ts / 1048576.0  
  
  Endmethod()    

  PublicMethod(n,ADD,.i,key.s param(*mem=0) param(len=0))
     Private thash.q,mhash.q,ohash.q,a.i,*tb.byte,hf.i
     If Not len 
     thash = fnv32(@key,Len(key),#FNV_1) & $FFFFFFFF
     Else 
     thash = fnv32(*mem,len,#FNV_1) & $FFFFFFFF
     EndIf 
         
     mhash = thash % *this\mbloomsize  
           
     *tb = *this\bloom+(mhash>>3) 
     *tb\b | (1 << (mhash % 8)) 
     a=1 
     
     While a < *this\nKeys
       thash = fnv32(@thash,4,#FNV_1)
       mhash = thash % *this\mbloomsize   
       *tb = *this\bloom+(mhash>>3) 
       *tb\b | (1 << (mhash % 8))  
       a+1
     Wend 
     
     If *this\errorless
       hf = 16777619
       If Not len 
         thash = (fnv32(@key,Len(key),#FNV_0) + hf) & $FFFFFFFF
       Else 
        thash = (fnv32(*mem,len,#FNV_0) + hf) & $FFFFFFFF
       EndIf 
       mhash = thash % *this\mbloomsize  
             
       *tb = *this\bloom1+(mhash>>3) 
       *tb\b | (1 << (mhash % 8)) 
       a=1 
       
       While a < *this\nKeys
         thash = fnv32(@thash,4,#FNV_0) 
         mhash = thash % *this\mbloomsize   
         *tb = *this\bloom1+(mhash>>3) 
         *tb\b | (1 << (mhash % 8))  
         a+1
       Wend 
     
     EndIf  
      
  EndMethod()
   
  PublicMethod(n,Check,.i,key.s param(*mem=0) param(len=0))
    private thash.q,mhash.q,ohash.q,tret,mret,a,*tb.byte,mf,hf.i 
    
    If Not len 
     thash = fnv32(@key,Len(key),#FNV_1) & $FFFFFFFF
    Else 
     thash = fnv32(*mem,len,#FNV_1) & $FFFFFFFF
    EndIf 
    ohash = thash     
    mhash = thash % *this\mbloomsize 
    mf = (mhash % 8)
    *tb = *this\bloom+(mhash>>3) 
    tret = (*tb\b & (1 << mf)) >> mf  
      
    If tret = 0  
         PublicReturn 0
    Else     
         mret + 1
    EndIf
    a=1 
    While a < *this\nKeys
       thash = fnv32(@thash,4,#FNV_1)  
       mhash = thash % *this\mbloomsize  
       mf = (mhash % 8)
       *tb = *this\bloom+(mhash>>3) 
       tret = (*tb\b & (1 << mf)) >> mf  
        
       If tret = 0
          PublicReturn 0
        Else     
          mret + 1
        EndIf
        a+1
     Wend
     
     If *this\errorless 
      hf = 16777619 
      If Not len 
       thash = (fnv32(@key,Len(key),#FNV_0) + hf) & $FFFFFFFF
      Else 
       thash = (fnv32(*mem,len,#FNV_0) + hf) & $FFFFFFFF
      EndIf 
         
      mhash = thash % *this\mbloomsize 
      mf = (mhash % 8)
      *tb = *this\bloom1+(mhash>>3) 
      tret2 = (*tb\b & (1 << mf)) >> mf  
        
      If tret2 = 0  
           PublicReturn 0
      Else     
           mret + 1
      EndIf
      a=1 
      While a < *this\nKeys
         thash = fnv32(@thash,4,#FNV_0);  
         mhash = thash % *this\mbloomsize  
         mf = (mhash % 8)
         *tb = *this\bloom1+(mhash>>3) 
         tret2 = (*tb\b & (1 << mf)) >> mf  
          
         If tret2 = 0
            PublicReturn 0
          Else     
            mret + 1
          EndIf
          a+1
       Wend
       
       If mret = *this\nKeys*2
          mret = 1
       Else 
          mret = 0
       EndIf
     
    Else  
     
     If mret = *this\nKeys
        mret = 1
     Else 
        mret = 0
     EndIf
    
    EndIf 
       
     PublicReturn mret
      
  EndMethod()
    
  PublicMethod(n,Merge,.i,ClassPointer(n,*pbloom) param(start=0) param(len=0))
  private sz.i,*t1.integer,*t2.integer,*t3.integer,*t4.integer,asz = SizeOf(Integer)
  sz  = *this\bloomsize
  If *this\bloomsize = *pbloom\bloomsize
    If start > 0
      a = start 
    EndIf 
    If len <> 0 
      sz = len - a
    EndIf      
    If *this\errorless
      While a < sz  
        *t1 = *this\bloom+a 
        *t2 = *pbloom\bloom+a
        *t1\i | *t2\i
        *t3 = *this\bloom1+a 
        *t4 = *pbloom\bloom1+a
        *t3\i | *t4\i
        a+asz
      Wend 
    Else 
      While a < sz  
        *t1 = *this\bloom+a 
        *t2 = *pbloom\bloom+a
        *t1\i | *t2\i
        a+asz
      Wend 
    EndIf 
  EndIf     
   
  EndMethod() 
  
  PublicMethod(n,Clear,.i,*null)
     FillMemory(*this\bloom,*this\bloomSize) 
     If *this\errorless
       FillMemory(*this\bloom1,*this\bloomSize)
     EndIf 
  Endmethod()
  ;not addapted for errorless mode 
  PublicMethod(n,Fill,.i,*mem.i param(size))
  private sz.i,*t1.integer,*t2.integer,asz = SizeOf(Integer)
  sz  = *this\bloomsize-asz
  If *this\bloomsize = size 
    While a < sz  
      *t1 = *this\bloom+a 
      *t2 = *mem+a
      *t1\i = *t2\i
      a+asz
    Wend 
  EndIf   
  EndMethod()
  ;not addapted for errorless mode
  PublicMethod(n,Export,.i,*mem.i param(size))
  private sz.i,*t1.integer,*t2.integer,asz = SizeOf(Integer)
  sz  = *this\bloomsize-asz
  If *this\bloomsize = size 
    While a < sz  
      *t1 = *this\bloom+a 
      *t2 = *mem+a
      *t2\i = *t1\i
      a+asz
    Wend 
  EndIf   
  EndMethod()
  ;not addapted for errorless mode
  PublicMethod(n,Save,.i,file.s)
     private sf.i
     sf= OpenFile(#PB_Any,file)
     If sf 
       WriteData(sf,*this\bloom,*this\bloomsize)
       CloseFile(sf)
     EndIf 
  EndMethod()
     
EndMacro 
 
Macro Table(n)
  pfunc(n,Free)
  pfunc(n,Create)
  pfunc(n,ADD)
  pfunc(n,Check)
  pfunc(n,Merge)
  pfunc(n,Clear) 
  pfunc(n,Fill)
  pfunc(n,Export)
  pfunc(n,Save)
EndMacro
;Bloom Filter Constrution macro call this macro in you code 
Macro BloomFilter(n)
  Class(n,bloomStruct(n),Prototypes(n),Methods(n),Table(n)) 
EndMacro 
;
;/////////////////////////////End Class//////////////////////////////

;/////////////////////////////Test///////////////////////////////////

tt.TIMECAPS
timeGetDevCaps_(@tt, SizeOf(TIMECAPS))
timeBeginPeriod_(tt\wPeriodMin) 

BloomFilter(clsBloom)
;Create objects 
Global Bloom1.ClsBloom_obj = New_ClsBloom(@Bloom1)
Global Bloom2.ClsBloom_obj = New_ClsBloom(@Bloom2)
 
OpenConsole()
  tv.q
  ;number of items for bloom
  items.q = 5000000
  ;number of keys 
  keys = 4 
  
  ;error rate 
  ;if rate is 0.0 it is still posible to get errors! 
  er.f = 0.005 
  
  seed.i = Random(100)+1
  
  sz1.f = Bloom1\Create(items,keys,er)
  sz2 = Bloom2\Create(items,keys,er)   
  
  PrintN("Creating " + Str(items) + " item Bloom Filter " + StrF(sz1,3) + "Mb")
  
  ;test add, check And merge functions  
  PrintN("Add this string to Bloom1 and check if it's there")
  tps$ = "Add this string to Bloom1 and check if it's there" 
  Bloom1\Add(tps$)
  If Bloom1\Check(tps$)
    PrintN("")
    PrintN("  Yes its there") 
  EndIf 
  
  PrintN("")
  PrintN("Add 20000 random Strings to Bloom2")
    
  Dim astr.s(20000)
  
  For a = 1 To 20000 
    val = a
    tps$ = MD5Fingerprint(@val,4)
    astr(a)=tps$ 
    Bloom2\Add(tps$)
  Next 
  PrintN("") 
  PrintN("Combining Bloom2 with Bloom1")
  Bloom1\Merge(Bloom2)
  PrintN("")
  PrintN("Checking that the merged values are in Bloom1")
     
  For a = 1 To 20000 
    tps$ = astr(a)
    ct + Bloom1\Check(tps$)
  Next 
  PrintN("")
  PrintN("   Result found " + Str(ct) + " items in Bloom1")
    
  PrintN("")
  PrintN("Clearing bloom1")
  Bloom1\Clear()
  PrintN("")
  PrintN("Test Adding " + Str(items) + " Items, wait..") 
  
    
  ct2=0
  ct1=0
  ct3=0
  
  ;timing test add  
  RandomSeed(seed)
  
  st = GetTickCount_()   
  tp.q
  For a = 1 To items  
    tp = a
    Bloom1\Add("",@tp,8)
  Next 
  
  et = GetTickCount_() - st 
       
  PrintN("  Time to add " + Str(items) + " items with overheads " + Str(et) + " milliseconds")
  PrintN("")  
 
  ;timing test for false entries that have not been entered into filter  
   
  PrintN("Checking for false entries, wait..")
    ct2=0
    RandomSeed(seed)
   
    st1 = GetTickCount_()
    
    For a = 1 To items
      tp = a + items 
      ct2 + Bloom1\Check("",@tp,8)
    Next 
         
    et1 = GetTickCount_() - st1
   
   ;time the loop overheads to get a time differential to measure the add and check rates   
   st1 = GetTickCount_()
   a=0
   For a = 1 To items
      tp = a
      ct + 1
   Next 
   et2 = GetTickCount_() - st1
     
   
   PrintN("  Time to check " + Str(items) + " items with overheads " + Str(et1) + " milliseconds")
   PrintN("") 
   PrintN("  Number of false positives found = " + Str(ct2) + " err % = " + StrF(((ct2/items)*100),3))
   PrintN("") 
   PrintN("  Time of overheads " + Str(et2) + " milliseconds")
   PrintN("")
   PrintN("     Avg add time minus overheads= " + StrF((et-et2)/items,6) + " milliseconds") 
   PrintN("     Avg check time minus overheads= " + StrF((et1-et2)/items,6) + " milliseconds") 
   rate.f = (1/((et-et2)/items))*1000
   PrintN("")
   PrintN("     Average add rate items per second " + StrF(rate,0) + " p/s")
   rate.f = (1/((et1-et2)/items))*1000
   PrintN("     Average check rate items per second " + StrF(rate,0) + " p/s") 

          
   Bloom1\free()
   Bloom2\free()
   Bloom1\Destroy(@Bloom1)
   Bloom2\Destroy(@Bloom2)
   PrintN("")
   PrintN("")
   
   Input()


Last edited by idle on Tue Dec 15, 2009 6:12 am, edited 19 times in total.
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

It's PsuedoBloomTastic!!! :wink:

Seriously Inner... this is very cool! Good work! :D
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Post by srod »

Never heard of those before; but yes, very interesting and could be very useful indeed. Nice one idle. 8)

Just goes to show that the best ideas are often the simplest!
I may look like a mule, but I'm not a complete ass.
User avatar
idle
Always Here
Always Here
Posts: 5915
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Post by idle »

@srod

Yes they are surprisingly simple and relatively unknown, which is quite amazing for something that's so useful.

I should probably mention that it does have some issues, considering that it's byte based, it could easily over flow an index and then you wouldn't be able to delete items from it.

Also the SHA1 is very slow but it does produces a very good distribution, however it's only really practical to use with up to 5 hashes in this implementation.

@rook

Great work Inner, I think it deserves a beer, your shout. :lol:
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

I am not currently allowed to imbibe things of the beerish nature... They have me monitoring my blood sugar levels at an ungodly rate! :evil:

But when I am able... A bottle of Santa's Butt all around!
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
User avatar
idle
Always Here
Always Here
Posts: 5915
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Post by idle »

Rook Zimbabwe wrote:I am not currently allowed to imbibe things of the beerish nature... They have me monitoring my blood sugar levels at an ungodly rate! :evil:

But when I am able... A bottle of Santa's Butt all around!
I was implying Inner owed me a tui's (beer) for getting the credit, besides I think he's closer to Mangatainoka than I am.

Though if you can vouch for a bottle of Santa's Butt, why not!

:lol:
User avatar
idle
Always Here
Always Here
Posts: 5915
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: Bloom filter Class

Post by idle »

Turned it into a class better for working with multiple filters, it's still pretty quick too!
see first post

A quick hacky example loads a ~1700 list of words into a bloom

Code: Select all

XIncludeFile "oobloom.pbi"

BloomFilter(clsBloom)
;Create objects 
Global Bloom1.ClsBloom_obj = New_ClsBloom(@Bloom1)

items = 1650
keys = 4 
er.f = 0.010 
sz1.f = Bloom1\Create(items,keys,er) * 1024 * 1024

Structure Wrd
    kVal.q
EndStructure

;NewMap Wordmap.wrd()


*Mem = AllocateMemory(13053)
UnpackMemory(?wordlist_Start,*Mem)

While a < 13053
  tv = PeekB(*mem+a) & $FF
  If tv = 10
  a+1  
  tword.s = PeekS(*mem+la,(a-la)-1)
  Debug tword 
  ;Wordmap(tWord)\kVal = fnv32(@tWord,Len(tword))
  Bloom1\Add(tWord,Len(tword))
  la=a 
  EndIf 
  a+1
Wend   

FreeMemory(*mem) 

If OpenConsole()
    PrintN("Bloom Size " + Str(sz1) + " bytes")
    PrintN("Dictionary size " + Str(13053) + " bytes")
    PrintN("Enter a word or type quit to end")
  Repeat 
    ClearConsole()
    
    str$ = Input() 
    If str$ <> ""
    If Bloom1\Check(str$)
      PrintN("Words in dictionary " + str$)
    ElseIf str$ <> "quit" 
      PrintN("I don't know that word add it to dictionary [y/n]?")
      If Input() = "y" 
        ;Wordmap(str$)\kVal = fnv32(@str$,Len(str$))
        Bloom1\Add(str$,Len(Str$))
      EndIf  
    EndIf 
    EndIf     
    Delay(20)
  Until str$ = "quit"
 
EndIf

Bloom1\free()
Bloom1\Destroy(@Bloom1)


DataSection
WordList_Start: 
Data.l  $32FD434A,$3CB90000,$6BEC85F2,$6DC02005,$5F4A72F6,$B7F600C7,$75015B24,$41B08C72,$60F8372F,$CA6E1FEB
Data.l  $14740877,$09408168,$200FA05C,$701060E7,$E3E98807,$FCE86D13,$5CBC0190,$6C893004,$B38C468C,$176179CE
Data.l  $29BB0D03,$41504050,$22A7B605,$C1DE1D9D,$4C06B848,$D0B032E2,$8D2026C5,$418EB0EE,$09B20A88,$C971F01D
Data.l  $B0919D07,$860D8A79,$60601412,$C0249603,$CE4311CE,$8268DE10,$854A4D26,$4274025B,$108C6DB0,$84048137
Data.l  $65811A60,$7E1C7E63,$3B1D28BB,$01176032,$3446478B,$C2642EF1,$130BD537,$56802D14,$0D2700E8,$74B0D35A
Data.l  $7A30304B,$84D354A0,$C06C4855,$1419BC08,$FA44401B,$74FAE247,$713AAB94,$C81480B8,$D2A30F0E,$403DB410
Data.l  $04664321,$780633D0,$686D0D23,$F2EA06E0,$04230DB9,$C8650EA3,$2BB44442,$CEF14116,$85430226,$0D34838A
Data.l  $05136320,$307C6219,$4C134C0F,$C053309B,$4A6A2980,$63B4B603,$6E458076,$E0555C54,$0D993BED,$12201B05
Data.l  $80218394,$D041B50F,$90EAF00B,$1454E651,$C527526F,$073B961F,$A4A60D86,$208049F0,$05467229,$11C62050
Data.l  $EC17E89F,$DEF00AC2,$F780C066,$5EFB5371,$2A77AF3F,$98015A9B,$0910A01A,$B1D02DE5,$4079A0D0,$4BB0683B
Data.l  $21436721,$9BE69374,$0A0B3B7D,$C0428618,$18DFA83C,$1B20A472,$032050DD,$6DD7E632,$015AD2D5,$B88CB038
Data.l  $8B766368,$D971ADE0,$59AAC094,$1829B01F,$D8D8581D,$A26A0158,$B017353C,$245F0161,$0BD45128,$0B89936C
Data.l  $34525E50,$2DF2A812,$B0E42DE0,$D1B4864F,$C285A0C9,$0F6CD586,$B2C216D8,$8126F080,$80EE70D2,$7512D006
Data.l  $E582E864,$E007021D,$005FA096,$07D426D9,$242A6FA8,$5D1CB960,$88CB266A,$1C4027C4,$0243028E,$4A4341D0
Data.l  $BA503003,$3872C033,$D013F067,$30A408A6,$1D25F7B5,$0242F405,$65E0997E,$2018FBA3,$60291F5B,$44542F1C
Data.l  $226CB6B1,$808107D8,$FDC21040,$6CB8B9CD,$10E0A1BA,$60E48F94,$401215D9,$01E001AE,$91AD787C,$10C0FC69
Data.l  $02CDD9C0,$B80E7228,$C950D303,$9DF27780,$5DB27816,$3ADE61DC,$03B82260,$219B7806,$1CDB112A,$C406AA28
Data.l  $05D8C057,$E6990E08,$32C52E04,$71280A07,$305B500C,$A434B6C0,$00AD6D13,$18921E46,$CA82ED14,$12924137
Data.l  $6379D990,$82E1DA60,$7836EF51,$9CC05130,$81274DB7,$9301C059,$C016500A,$F0DF1725,$9DA0E9EE,$A585E602
Data.l  $2EE1B20D,$86724E90,$82A2DE52,$61DA6402,$0F0504F0,$902433EB,$4015047B,$113A94B9,$40200426,$142816BB
Data.l  $6021538B,$ED32943E,$C022E946,$061B15DD,$1B6A342A,$75374B4E,$798010A1,$E1D998B8,$9C03C749,$5D2330B5
Data.l  $05B73D4A,$B52955A3,$60AA4819,$2F0ABC04,$053CC3E7,$FA13D5CC,$27077CC3,$0047C5D4,$6EF18982,$198DED15
Data.l  $99A76EEB,$A049A513,$C406425D,$8540C2E4,$C6B00E76,$229974E3,$0148200B,$4980C803,$6848120A,$B0814BBC
Data.l  $18198084,$2C0F8BA8,$13860A43,$7BEB0377,$7E4CE805,$CB232E4A,$6EC51686,$A8001201,$643A8825,$04BC2853
Data.l  $8040E2DC,$44D8CD1C,$D602181B,$0D631C72,$40326142,$10086A4F,$9AC249B7,$224E567C,$2CA104F6,$A5826320
Data.l  $5B034C7B,$60164E50,$C69C6581,$82C71B0E,$868515A2,$097600FD,$DEFE2B98,$1015C902,$B9E0C386,$D3F87100
Data.l  $C0659B30,$D05C6453,$49C2B670,$8ADEB16C,$C5122C52,$1EEA5079,$8BAAAE50,$12EF5125,$8A4955B0,$BB4A084A
Data.l  $3068D80B,$A39C59C0,$480FC34A,$5C0206C7,$A25C126A,$C9F84EA0,$7FA44765,$E46F5680,$760808DB,$6078A402
Data.l  $54E91413,$05B51181,$7098514E,$976346F3,$0486FD01,$A8548F28,$36044257,$106E5EA9,$5AB4ED6F,$50260C82
Data.l  $337868C2,$D0868117,$44304045,$81D8DA33,$80F01074,$0AC00C77,$A900771B,$45B51B72,$A0139490,$54A3F8CE
Data.l  $1B3834B8,$71B56A30,$A6090407,$8044AFE0,$00D2DDD3,$600AA2F2,$33CCA4B8,$3C1CD924,$C5B00383,$AA638105
Data.l  $68D102BC,$A58EB185,$811B818E,$5E631982,$C06402AE,$394D0D62,$2AD238CA,$90021013,$BEA48CA1,$634C01E3
Data.l  $E803004C,$98B86E98,$0297A59B,$19153671,$C24C6008,$A38BA7A0,$12B40C28,$AB725DA7,$18094434,$4E7E8498
Data.l  $7A9A25B8,$E568B0F1,$5CD801A1,$EB7D2453,$60220173,$7719F393,$94EAF78F,$E05865EE,$93C2517A,$D21D6414
Data.l  $0F1EF2A6,$7A28585A,$1C995096,$34DD5C5A,$08C2BA58,$A75326C1,$A01F29BE,$2DD00169,$D0C01903,$60C1804B
Data.l  $88D1C3A7,$A01029CC,$4E14C35F,$0389F1B0,$C5C01363,$1660DC03,$CDB95DC9,$E281981F,$AE252500,$9415401D
Data.l  $E65686FA,$2902C043,$FB647C98,$3A319CCE,$14E96012,$0998E017,$EA616148,$A471BCEB,$028E38D1,$01DC6516
Data.l  $15619365,$C6683F4C,$0F5A40B2,$CD0D033D,$2D842304,$850437B3,$19CA3B78,$E7020183,$160349A8,$8DA0876C
Data.l  $D0C16723,$BB88382F,$19EFAB09,$4331A054,$258E60B9,$C71D82E5,$C72EB64B,$AE5C460D,$5D8303A2,$76072C07
Data.l  $3040AE8D,$F8510AF1,$F17A2463,$6D8C8E51,$A60B6084,$8D1625C2,$1818287C,$8AA89D06,$8A86526D,$01750C38
Data.l  $5E308D18,$EC1405A0,$10002CBB,$30B6DDEC,$45C5F374,$FA4080C1,$0DD5D806,$18DB7B90,$98269380,$60225043
Data.l  $32C06C83,$A8008CBA,$F0103AED,$4032F2D3,$C679BB42,$AEB5794F,$074BAC01,$F001C3A8,$38879946,$6E9B56B9
Data.l  $A0B84CC8,$008F4166,$72300AF3,$3572474B,$52A01076,$F8380667,$F42C1CE8,$31BE8777,$8B93EE80,$E018A846
Data.l  $C822F291,$F4727780,$2A2200A8,$034200D7,$2482C8A8,$602B6C04,$80B30BA3,$A65C8BF0,$DD08F610,$62C34C05
Data.l  $4006E026,$BC05B14E,$28F3C21B,$02805878,$01377C03,$7530B202,$100A40FC,$AE3058D9,$BB006E39,$BD1784FD
Data.l  $05F6EF10,$602A68E0,$4C105620,$A1F409C3,$A1BA0B6B,$815A03C2,$75198863,$C54D2606,$10C86537,$6B9FB403
Data.l  $778A2A0A,$E542E00C,$5F6C29A6,$9A0DE044,$A40806B9,$0D42007F,$F3B0D840,$4ED3618A,$86170702,$300CC090
Data.l  $AE38429F,$17201C76,$418E9AD2,$F3653458,$00B31A02,$A2D31B97,$080B74E3,$75F5016F,$8E120DE0,$AB3428BF
Data.l  $9D8D402A,$59AE4500,$C6C9C19C,$4972322B,$483AEE84,$24E7C024,$1D675B4C,$C0214404,$BEDED50A,$60C9EC03
Data.l  $730C4017,$CD08BE4D,$D14C12CB,$1332C1A8,$A883BD98,$39C003FC,$05573854,$250B93B4,$B012A3C6,$00D1BE18
Data.l  $8774B522,$175E5607,$80F1A2C7,$D808C054,$782A3548,$3C9C0AF5,$09BF9C10,$0C03765D,$47E94CCC,$0077E170
Data.l  $DE6359A5,$74FDA805,$96081822,$263D430B,$23B5030D,$FCD0EB01,$0A569CE0,$10128804,$0D63CBC0,$DF6275AB
Data.l  $7F310532,$1561C5E7,$D514C606,$C5089809,$5230234B,$4EB15153,$616629C0,$1DBAF301,$F401AC36,$ED90A7C8
Data.l  $5E3755A2,$195C2710,$884F04C0,$80CAE70C,$C0587816,$CA75A886,$02C7A401,$8D606576,$D0C1A3E6,$2AE52B35
Data.l  $34732C22,$5FCA58AD,$08AE6FAB,$302E6EA0,$D0077DA1,$C92F5704,$18BB0B29,$113B5B30,$D0C86FA0,$EC663FCB
Data.l  $00AF51DA,$E1EBA1E7,$6B363140,$F94616E3,$12682166,$487ED78E,$53A01434,$A06A8E3A,$72010E81,$1092A948
Data.l  $559C2718,$D1DBD71B,$2261A59D,$3E354603,$4A2A42B8,$0CC60CA1,$C268158D,$AAC646ED,$ED760515,$8F09DDCE
Data.l  $E602F48B,$FADEA5EB,$29E85266,$D404CF40,$361C38F4,$91039BC6,$E80CBE41,$C709915C,$5D00B32A,$A0BCB8A9
Data.l  $5B88ABE5,$70061101,$7E3E2010,$01116150,$E37AA9BB,$CE40607A,$10324601,$01701208,$EB6CE8E3,$D0DBE4DB
Data.l  $DA333660,$109204B6,$03E06220,$080A29BC,$60A0B050,$E172ED3B,$0D6B1004,$212AAC0F,$00557E9B,$AB472086
Data.l  $6282E690,$D4ECA162,$1DD7581F,$019D6019,$5BFA4E84,$AF60A017,$BA360221,$A1268011,$5F23C05D,$60F00E3B
Data.l  $161C2025,$1040B0CD,$183C234A,$41F39DD8,$14A52480,$701D48E5,$D3A551DE,$BBFB00A4,$8554A404,$49B4A643
Data.l  $4B877017,$768002A3,$D0B68011,$0067AF59,$9A495CC5,$A0A9BC04,$52F8B8CB,$01A0AB1A,$03E2E1E9,$0D26B5EB
Data.l  $2CD85D5B,$D002CC13,$A9408061,$5442469D,$AB9022DB,$535B8089,$1745C180,$AB003E02,$3016F430,$8B634B78
Data.l  $DCD7BB52,$ED24C325,$16063875,$8D2A01EE,$2CAE1E1E,$137164C0,$050A6BA0,$57C0313C,$59E8E790,$7BAC0A79
Data.l  $9618EA6A,$A005D1C5,$0A370917,$E8F9CFA0,$295D75D5,$1E60AC60,$087892E1,$BAA9A3BC,$1037CC00,$8723E901
Data.l  $69C02AD1,$DB5803CB,$C72C525D,$804201D0,$E403BDEA,$C42C06AA,$3F1C00EA,$6F93044B,$4E02AC10,$701E4678
Data.l  $80892ECD,$00757EFC,$60265E28,$F8195C67,$AAE7E82A,$0F1A1657,$3A2B9A10,$02E2D62A,$BA80E2E8,$9E0E6AED
Data.l  $6C0930FD,$28647076,$3AE3729A,$014107DA,$06C1D8DE,$DC01FD16,$2016601C,$04A75516,$01CEE3D7,$5070C674
Data.l  $48B1A0A2,$573F0155,$B734E206,$E4360DAE,$DBCFE025,$C157035C,$03E2C2A8,$2E2D4813,$9011BD2B,$6BF74B81
Data.l  $AB39726C,$0172B048,$492D860D,$D0B59C50,$C033FE00,$60392F3F,$5DADD62C,$171ACC03,$45A20887,$1B51A699
Data.l  $817B8DB0,$C064C180,$38A91601,$30225960,$2B9A0E8B,$DC6FB9E3,$83F48804,$046902C6,$01DE9BE6,$0217CB16
Data.l  $19EDC04D,$4038A140,$1B040F82,$260A702B,$2EE25780,$03CF6E90,$32C0EA2C,$90117300,$04AEA386,$0381B4FC
Data.l  $03941EA3,$BCC594DA,$2BB08804,$301498A8,$2A03BA0F,$17A07713,$041363B2,$9D6A2EE1,$04A24E70,$DB31E264
Data.l  $4A763CFD,$A286A805,$80E42304,$DCE8D305,$805B3CAE,$18427408,$40158F6D,$96665F10,$6BE5E85D,$5E26FB43
Data.l  $B8B8B4EA,$7F3AD81B,$0D8600E0,$4A758FB0,$1A629180,$0494A4A0,$B58743B4,$AD212F6E,$D0EA50BB,$56288041
Data.l  $92470620,$F180F28A,$0188800F,$E04C8347,$75050300,$F337051B,$B922717E,$239A4274,$B41C8B0E,$04A0D018
Data.l  $F71CD953,$49504B3C,$94060220,$56604A60,$1705D0C5,$D2B8375C,$DBA094BE,$AA003E8A,$185F16AD,$02ACD845
Data.l  $D9648963,$095EC176,$25E553BC,$687EE6C0,$FDC0E8E3,$4C170332,$99D04AE7,$9D0DCBF7,$2A7D3EC6,$BC0AE0BA
Data.l  $6DD669EB,$8399F880,$813E3B97,$B4FC8382,$5F83B061,$EB819785,$3948D0D0,$06AC4090,$914401CB,$35DE6583
Data.l  $29019870,$F806ECC0,$B166654B,$34B3010C,$85C32202,$2808AC80,$4BADA4A7,$A9D4F324,$203CB893,$C0A71860
Data.l  $4200A3E1,$E7A85CAD,$E11CEF2B,$6BB603BC,$1896041C,$94CAA068,$02BB1A85,$5C0D96E8,$9860E05E,$DA02F989
Data.l  $C18661D9,$3B8052C9,$9747068F,$480F35DE,$75780A77,$AA571203,$425BEE30,$8980DB21,$068A8C04,$AF95A728
Data.l  $ED802080,$5BDC4008,$74AFB74A,$943588C2,$428A1880,$1381CA9D,$4018A8C1,$6D3691C3,$99800F3D,$069C859B
Data.l  $75627B6C,$57B22C00,$77063005,$0F0D004E,$435C00BD,$B5747686,$30022210,$00B00380,$6285AA67,$E1E403AE
Data.l  $1AE3B6DD,$807301E0,$A50C76B2,$CC089093,$CA86042A,$E1176421,$9B8E4EF9,$6A085CA3,$BB38594A,$5C93FBB5
Data.l  $016E3B1C,$50064019,$178B57C7,$A8A10240,$A0DC8173,$6DEE00DB,$B6D4AD47,$0D80132E,$5C4A757C,$7E52641C
Data.l  $1F638091,$F95636DF,$50AF6680,$AAE91C00,$EAEC59B0,$C190DCEF,$AA6401C3,$3A8AA278,$8FC68DC5,$7780A802
Data.l  $9002300F,$4802ABB7,$2E5DCB8D,$A86C8DA6,$336E0062,$DC051409,$42A9D149,$7CD12677,$14014B34,$F0C2956E
Data.l  $65635ECD,$8D607739,$78A6515C,$59CE25E9,$D30F0207,$042001DD,$3C4BB26C,$C3A8E454,$52A0009A,$0BC4038E
Data.l  $77750E81,$FBA85014,$5197820E,$DA01080D,$D25B537C,$0BAED2C0,$802A70B8,$01B697C1,$35397246,$44027616
Data.l  $15BA57EB,$E9D79605,$B219A026,$62200160,$113E13AF,$1EAE1692,$458CC605,$81721419,$AC44E2BC,$F20078F2
Data.l  $E974CEB2,$9142C9B0,$10A88700,$AA0041AD,$D60637BD,$C7D0AED9,$96010369,$28036C8C,$64B31180,$2E355D60
Data.l  $02CF7A17,$780ACA82,$8F42A6CF,$C061EE3E,$84ECEC1E,$96F3C2A2,$10BC3A00,$E1E05E20,$62F02808,$6D622A59
Data.l  $010A3E0A,$E2CC2CBF,$DEC8E304,$A3E105AA,$4557043D,$1C51C40E,$55252520,$56B2C4F0,$F0AC900A,$2AE18139
Data.l  $66440150,$60191D17,$C7A07662,$CACB6BA9,$221DD3ED,$68055A40,$A8482B96,$8048ABE6,$871015F9,$80F839CB
Data.l  $DB0A6A75,$F378DC14,$BBF96543,$4EC007F8,$06B8008C,$01D57394,$290B588C,$06A7ADA0,$3D3B9321,$F0123C03
Data.l  $C0F0CE9E,$9808F520,$E074BBAF,$A32C043D,$8030DED8,$A65DBE58,$B8F72580,$8AA4B418,$46C92A5B,$A0120828
Data.l  $00AF3E68,$641328F8,$A1B27BB4,$0E63E6CC,$36BAAF39,$02408E86,$03A0E132,$79604A95,$52BE1D51,$A0943CDA
Data.l  $04AF01DE,$E2122BB8,$C803CAD2,$8EB12EDF,$23E46C1C,$54C2CCC1,$A4083230,$94DF6752,$8E2C2E22,$43D0BCF9
Data.l  $04045280,$63C7F5E4,$EF01DD18,$1F751828,$4750D0B6,$31001920,$0E62BE58,$9451A5A7,$0C256FE6,$BCE08314
Data.l  $D7010465,$061A29EA,$C2107E26,$57732824,$80461681,$5840FD0C,$B76DA074,$23294065,$4048BE20,$E933BA0F
Data.l  $361BD383,$53B4C06E,$4DB79D40,$724BBB5C,$0E131303,$22B70720,$AB6D0176,$A40A5DEC,$FB89825B,$13667840
Data.l  $B547D1C6,$08838847,$FB01FA56,$6C03ABB3,$EC04AA83,$802BAEA4,$484C0F28,$091AB297,$C040EC71,$5410BD5A
Data.l  $359AE0E0,$79814BED,$F40400D0,$C8042BB1,$1D8EC30B,$2C35412C,$4E73E763,$DE031771,$4BE41433,$4C0FCB49
Data.l  $C17AD5D0,$BDD2C093,$4C059002,$6C10AAE2,$471BA236,$943616AB,$D8AC0770,$459DC12C,$065DBE3E,$7BBA01D0
Data.l  $215B2B91,$7291031E,$D3037960,$842780A4,$87980AE3,$5D005D7C,$C71C1872,$7C1F93B1,$9C63366B,$0707BC15
Data.l  $842C1CC7,$99C1A545,$DB1612AA,$98285EB7,$08825434,$795A0225,$8EA58580,$0252E801,$5DE0E0F6,$82006B45
Data.l  $37231AB8,$F3DAA28A,$8440CB02,$753B157E,$6AC019DF,$1BDB632E,$41187C54,$32BD4601,$133D7244,$EF2858A0
Data.l  $E61C8000,$01410B2A,$E008B804,$4B60A547,$8100BB02,$02AE3155,$998015E3,$E385A573,$C01895E9,$80928211
Data.l  $E2880B0D,$1D02E02C,$4007ECF8,$064E2568,$58004514,$BE398250,$45F6B00D,$C1338585,$9D26EB41,$8C6ADC1D
Data.l  $0058C3E7,$BECE9472,$BC180E4A,$E975900C,$47E000DA,$FB760139,$00ADF009,$36EDDB79,$0E0772B2,$207096CC
Data.l  $B8857AB8,$92D2811B,$12750352,$0F5A9D90,$200E6E04,$0365AB0A,$01D76D16,$80807A9E,$F859D0E9,$E101E975
Data.l  $62EF9A3C,$B1D015A8,$5848350E,$F7963403,$8CEE0E4A,$09AF5EEA,$0E6F0068,$67F99DA0,$11A10681,$268B7E01
Data.l  $A98E2EAD,$456C3F8A,$CCB60991,$2C05D431,$EC80D4B7,$7A7705D4,$CC9861DB,$A6201AE5,$E0550E1F,$445A4472
Data.l  $2A2F6DA0,$17572438,$0F76F442,$295923B8,$B000DDCB,$44F5587E,$404360F8,$2D7E3F38,$2023D61A,$B7CC0581
Data.l  $EA11DB01,$CAE5962C,$5DAB4B45,$77BD29CC,$5E1FE015,$6A01A021,$E6B38060,$180948BB,$E00F0127,$72353F9F
Data.l  $5FAE6DA3,$7AC11B19,$E8051006,$D8074960,$806357C8,$6A395640,$5EEEA554,$F3F601B9,$0AB08064,$DBE03C04
Data.l  $A55A4002,$061DDFDC,$508A18D8,$06DCB132,$5CE739D6,$C4B68480,$366B7F12,$8307F940,$0815EE02,$1C2607EC
Data.l  $70D8ADE0,$88C8E118,$E61A472F,$0163D293,$C7D035DA,$81018FC3,$3BA114BC,$F66012AF,$71829560,$5DA9716E
Data.l  $4E024156,$240C6559,$F21C8340,$805B2AB4,$8983DE5D,$363F7D13,$2B97DBAD,$F02AB68A,$0B12F16E,$45595422
Data.l  $65C65432,$FA582D80,$4326F006,$A8171E01,$8AB8D7C0,$A7135499,$C6115100,$CEF4F321,$F7562E7B,$5329F600
Data.l  $0D55DA70,$BA808712,$C2387C3B,$D5E07C06,$8AEE063B,$00311450,$623E32AF,$9003C7FA,$CC1403E3,$9AF0ED5B
Data.l  $09300432,$E26AD001,$AD75120A,$74B08C82,$A22D3053,$22465CE0,$9EC55F2A,$02D25010,$C301504E,$E30BE02E
Data.l  $036B8796,$015A94C8,$2830B032,$DB53BC1D,$BC3A362C,$74654470,$7549DD28,$7A208083,$DDEA709B,$1981142A
Data.l  $9D7E018F,$3A572E09,$032CA633,$AEC35095,$EFECB00D,$CC105010,$475BAC02,$AF8F74AA,$33BD636C,$32CD9354
Data.l  $B04ACE80,$8054F011,$16022D26,$15185166,$713F8EC5,$172CCAE8,$88D2C990,$DC619A6E,$81D4AF7C,$89B4C46B
Data.l  $C610DF00,$2FDD6E45,$A0319819,$C1024C04,$8FD9BFC8,$F63BAC88,$7089301C,$63AC4921,$8CF875B3,$379B0F3F
Data.l  $131406E6,$1F6CBD1E,$D100B240,$371769D6,$71CC5C1F,$0654C774,$60416F38,$185D7B80,$A1CE3858,$5782A09B
Data.l  $58520805,$F1875008,$3C4101D5,$A9E580E4,$4025D955,$A04459E9,$036B0892,$C063F660,$208EACC0,$12BDBA58
Data.l  $09D080B7,$EE71CB01,$F100A938,$D5803010,$0361BBA9,$4A2B5DC6,$4042F813,$6002CA3A,$42CB2FAC,$5608D2E9
Data.l  $5F240245,$2EEBC0E2,$BF298023,$695553A2,$093800F6,$40239718,$961F9C07,$19D050CD,$75A28C0E,$6981DB2E
Data.l  $00A8196A,$2E38E66E,$EAB62D9E,$08048288,$CA32F8F5,$052ACFF1,$5EBA58ED,$B2E401C0,$00EA8148,$00EAF8E3
Data.l  $0117AD1C,$D6D0ACBF,$AE0162D6,$B95F136F,$5C1A8637,$D00A610B,$4C114B0A,$A07DAF1E,$D86D08C9,$8F340195
Data.l  $D9051653,$DE1DF218,$E1012018,$3180F02A,$7EB557D0,$0926838D,$58D04021,$DFF00683,$208BA22B,$0A7712A9
Data.l  $2C76D230,$A31BB7A2,$44031211,$B4034BE6,$02AA8AE2,$703A00FC,$D2F78980,$B4B44F8B,$EAAC2816,$6F16095B
Data.l  $1EB08918,$74DA018E,$282153E2,$19008C3F,$406F3772,$01AE75BA,$04755172,$061FF10A,$1B5B6AD8,$816E94A0
Data.l  $62C83860,$0A00A182,$B401B136,$60067D44,$8242C5C7,$2BCC553A,$558B3E3B,$E857C1BE,$4FD4E025,$80A8E6B9
Data.l  $82485DEB,$AE33133F,$D1C004DC,$46C28BAC,$911142BB,$108072BB,$AACC528C,$E085D5CA,$8C618C04,$0595D0E1
Data.l  $207C6A78,$198D0DE0,$08C0931E,$10143E95,$1BE5F381,$01DE99F0,$11536496,$833EB118,$08C12E1A,$3BCAAE8F
Data.l  $00E80C0D,$86F8A46A,$759BE600,$8C8A131F,$2A2A900A,$034E2970,$05BCDA88,$E03C9C4C,$23045B1D,$4FDEAE18
Data.l  $B4315C40,$DCC503CE,$D005B403,$B4C3958B,$D218893D,$A5845CAF,$057704BD,$065FF784,$41C14400,$651C256E
Data.l  $4A805F15,$8BBC5154,$32B86B9B,$A8440795,$A77BE096,$817EC02A,$16E02A75,$16FDB47A,$902700CE,$60739F01
Data.l  $7E5ECF97,$66BFBF69,$AACE8C86,$38BE80A0,$3405B00D,$2ABE2EF1,$DB9EBCA1,$8E4B779B,$8CAF0D72,$3E6A8643
Data.l  $515F2920,$1C66D401,$8C1B60AC,$30680CC3,$ACBE8C77,$3C9EC302,$527C6E73,$097001BB,$7629E950,$D8E20E28
Data.l  $69F8B08F,$926A90B8,$ACB3DE01,$E53805B2,$B33C00A2,$CD400D4E,$87C8032E,$89000DAE,$38906DD0,$24106D77
Data.l  $46AD0B95,$0A2208B8,$E1937AEC,$5DD6CA7F,$1C050186,$54E4C198,$860E65DB,$5F3C01EE,$4F050075,$E2A2F183
Data.l  $CAF72998,$56B71C03,$E3E63A1A,$B00FE021,$9D006060,$FA3E3F75,$1F0CB669,$EB0B0230,$27E3B134,$16E635AB
Data.l  $4D5E6C53,$E2000172,$5899CFF7,$1806CF68,$C1595D09,$45F478B6,$067BD6E3,$46F8599A,$85E68055,$F2EBA021
Data.l  $0384EAD4,$A02C6BB3,$20979F15,$53DCEB56,$BFC14BE6,$AAF1D83C,$52A92804,$305D5E01,$CA2AC576,$AAB4D403
Data.l  $530F7012,$EB914B30,$C1A889C2,$012048AE,$34C0A88D,$8D6E093B,$2AC536A8,$781BB06A,$DB438CC1,$8804C756
Data.l  $00590F89,$602425B7,$DD8F541B,$6ED02628,$B7B490C1,$946F2A2D,$0C014C07,$4B95E608,$77BA3142,$AF19D014
Data.l  $5BAD84E0,$F1807BE0,$344D0091,$981C72C6,$BE36D45E,$89760846,$28DE004B,$A5628960,$46B8E501,$3228E005
Data.l  $2CB5C2A2,$217864C0,$04B60C04,$914EBA08,$D7E0C2BB,$3B809401,$AC208006,$A8054155,$97B69657,$04717A7D
Data.l  $500D1005,$180A5E87,$AE119D95,$7145BB15,$E6068285,$90051A62,$C1C5E547,$9A793BB5,$3003DEA1,$F9DE1B06
Data.l  $61C24FA4,$D0130422,$8FF164DE,$88613E5B,$12178301,$45FC72B4,$76175E43,$6BCBE7B9,$D28F2AE3,$D6FC9165
Data.l  $881300D1,$04BDBBC0,$A67C0A19,$A52CC24A,$78C3040E,$AA014C08,$1250E552,$81304E60,$8085F601,$7706567E
Data.l  $CEEFF8C2,$0F4850B0,$099180DF,$26020F6D,$620245E5,$40F61551,$4C1022FC,$D9B6AF33,$C6D03105,$EC7530AB
Data.l  $19740A6F,$D707F201,$6EA6C1CE,$9C17A35D,$0C78DCAF,$3E370B03,$085C1A05,$126ACF18,$07E2FD0A,$38F7E408
Data.l  $6B102807,$7876C055,$3955067A,$6145F746,$4D74A6D3,$24EFA638,$3DC2E640,$A14B51B6,$801201AB,$E9203A83
Data.l  $B24800C2,$501000A3,$77D3AF9C,$6DCC8FE9,$44717100,$2DC5B468,$0225A801,$8087595A,$C7215400,$60A8A983
Data.l  $B2AB6189,$06A2B304,$8C1A6723,$5C3DA922,$9285DDE0,$A0112AEC,$B17FC194,$129D752B,$BDA13050,$E7F89AEA
Data.l  $30128048,$3101AADA,$F56DEF2D,$CCD130C2,$1A248133,$A0108778,$042E0C2A,$2261E270,$3185A238,$0A06C8BA
Data.l  $CAE80338,$B015B4BA,$F010AB88,$00C62E8E,$81C6B9E0,$D433FAE2,$6C006C08,$9665402A,$EF80D80C,$400110C8
Data.l  $77AAD2B9,$DB4750B0,$5A0174A2,$DB1312E3,$4BA023FD,$33D20723,$77A04219,$98EB06CB,$04010EB0,$24A68328
Data.l  $2D00A1B2,$067A5570,$7BF05BBC,$85540049,$193A5D1E,$804AFF60,$00E2B8B4,$EE64B292,$1704E318,$4014B016
Data.l  $DEFF77AE,$8CBF0F55,$041B1C61,$BE839DB8,$3D2A0024,$10128804,$DC23DE10,$74F403C2,$A3C1F259,$68CD8053
Data.l  $14BD2E93,$9A012B16,$B9F4E752,$B43C82AB,$16BA8046,$2C420482,$12AD1BDD,$4F402A95,$24EEA101,$855A2134
Data.l  $55C31C31,$FA407E01,$12B8F006,$D7B97770,$084581C9,$80D52E36,$EDF35AF1,$D8CC6CB9,$5B716805,$80853288
Data.l  $C2B97C28,$C80BA6D8,$F45D5300,$83452EA5,$01655662,$1397D91E,$06B67A30,$CF616908,$E75AD115,$DEFC7601
Data.l  $CB62BDBB,$D3C60900,$55F14029,$F2AB33C6,$60C6D90B,$B0BDD621,$CCF0014E,$986F0191,$E62A556D,$00000C16
WordList_End: ; endlabel
EndDataSection
Post Reply