Zero2Auto writeups
Last updated
Last updated
Below are a couple of Z2A course write-ups. I did these ages ago but never published anything. These are from 2021; They demonstrate the malware RE process all the way through. Screenshots are probably missing since I wrote this in 2021
So we get the following sample A0AC02A1E6C908B90173E86C3E321F2BAB082ED45236503A21EB7D984DE10611
A quick look in VT shows it being flagged by 53 av's. The FileName is cru_paker.exe Looking at the sections and their enthropy, we quickly see the sample is packed. Specifically, the .rsrc section has very high entropy.
The any.run report at https://app.any.run/tasks/c9da38c3-12ba-49f5-8ec9-dafac4764148/ considers the sample clean. We quickly understand by looking at the app.any.run that it crashed and never ran successfully. Only Kernel32 is imported.
Behavior analysis in VT shows:- the sample reaching out to pastebin.- Writing a reg key that seems related to proxy settings -> HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\SavedLegacySettings
We continue by throwing the sample in tria.ge.The output is now available at https://tria.ge/210205-gl47gj2jfx
We notice a pop-up window saying "Uh-oh hacked!" Cool! Looks like we have enough info to get started with analysis. Looking at resources with resource hacker we confirm there's one RCData resoure that looks encrypted.
I've got a feeling this is going to be RC4... Detect it easy doesn't have the packer signature.
The process tree suggests injection into svchost (or spawning a new malicious process called svchost.exe).
We can confirm that as we see most of the c2 reachouts com from svchost.Tria.ge shows cruloader as a user-agent. A quick google search shows a few z2a write-ups. I decide not to look at these but if this was a real-life IR scenario, looking at write-ups and existing litterature is likely a next step I would take
The pastebin link: hxxps://pastebin[.]com/raw/mLem9DGk contains a link to hxxps://[i.]ibb[.]co/KsfqHym/PNG-02-Copy.png ;
The tria.ge analysis also shows reachouts after pastebin to that domain. detonating it in a sandbox shows it's serving what appears to be a broken png.Opening the png in a hex editor doesn't reveal anything interesting yet.
Tria[.]ge also shows calls to WriteProcessMemory.
Specifically from a0ac02a1e6c908b90173e86c3e321f2bab082ed45236503a21eb7d984de10611.exe to a0ac02a1e6c908b90173e86c3e321f2bab082ed45236503a21eb7d984de10611.exe and from a0ac02a1e6c908b90173e86c3e321f2bab082ed45236503a21eb7d984de10611.exe to svchost.exe which confirms injection.
Another indicator is the EnumeratesProcesses behavior highlighted which suggests calls to ToolHelp32Snapshot to enumerate processes and threads. File and registry writes indicatw stuff to do with InternetExplorer? Network reachouts show calls to 224.0.0.252:5355 and 239.255.255.250:1900 ( outside of calls to 53;80 and443) Speedguide doesn't indicate anything interesting about these ports ( https://www.speedguide.net/port.php?port=5355 https://www.speedguide.net/port.php?port=1900 ) As we think the resource is encrypted, we're going to take a look at cryptofunctions SND Reverser Tool indicates RC4. Sure enough, we browse to that VA and can identify an sbox!SignSrch doesn't really tell us anything outside of the presence of IsDebuggerPresent
Let's open this guy in IDA!
First SUB looks like anti-vm/sandbox checksShortly after at VA: 401fab we have checks for cpuid etc.
In the debugger; we break on LoadResource. We execute untill return; step out and shortly after we see what looks like a decryption function.
We browse there in IDA (401300)
This string decryption function is invoked several times with the strings at 414880 and 414970 I tried several approaches to understanding the decrypt function. Quickly looking at it in the debugger, we notice it uses the string abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890./= and decrypts a bunch of strings that start at 00414880 ;
We select these strings and hit shift+E to export them. I think we're dealing with some substition/rot cypher because of that lookup string.
I thought I'd try using Cyberchef or Ciphey to try and decrypt these:
➜ z2auto-writeup docker run -it --rm remnux/ciphey -t ".5ea5/QPY4//"Result 'BYRE' (y/N): NResult 'ohEAhn* "inn' (y/N): N🌏 Thinking
None of these worked... That's dissapointing. We put some breakpoints in the decryption function. There's a few for loops. I just break on the last one. We see the characters of the Cyphertext being decoded one by one. Looking at the lookup table we confirm this is ROT13. .5ea5/QPY4// -> kernel32.dll The fact that the rot13 function is followed by GetProcAddress and LoadLibraryA calls followed by call eax/ebx.. confirms dynamic import resolution.
Not having IDA Pro; I decide to use cutter to anotate the rot13 decrypted strings: I like Ghidra but cutter now includes Ghidra's decompiler, has some pretty neat emulation features and navigating between graph view and disassembly view in Ghidra is a clumsy.
I wanted to try using cutter's powerfull jupyter notebook feature. It was not straightforward setting it up and I had to follow instructions at https://github.com/rizinorg/cutter-jupyter/issues/11 ;
After a bit of troubleshooting I got my notebook set-up.It ended up never working so I wenrt back to Ghidra... Documented this just to show, sometimes RE is a process!
After writing a small script to decrypt and annotate the rot13 strings, we quickly see 2 decrypted functions:
#Small script to decrypt and comment our rot13 strings used in LoadLibA+GetProcA
#@warsang
#@category Z2A
#@keybinding
#@menupath
#@toolbar
from ghidra.program.model.address import Address
import ghidra.program.model.data.StringDataType as StringDataType
my_string_table = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890./=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890./="
address_list = [0x00414894,0x004148a4,0x004148b4,0x004148c4,0x004148d4,0x004148f8,0x0041490c]
# helper function to get a Ghidra Address type from https://github.com/HackOvert/GhidraSnippets
def getAddress(offset):
return currentProgram.getAddressFactory().getDefaultAddressSpace().getAddress(offset)
def getStringAtAddr(addr):
"""Get string at an address, if present"""
data = getDataAt(addr)
if data is not None:
dt = data.getDataType()
if isinstance(dt, StringDataType):
return str(data)
return None
def rot13_string(encrypted):
for pos,char in enumerate(encrypted):
position = my_string_table.find(char)
new_char=my_string_table[position+13]
new_string = encrypted[:pos] + new_char + encrypted[pos+1:]
encrypted = new_string
return encrypted
listing = currentProgram.getListing()
for addr in address_list:
addr1 = getAddress(addr)
decrypted_string = rot13_string(getStringAtAddr(addr1)[4:-1])
# Get xrefs we want to comment
references = getReferencesTo(addr1)
for ref in references:
my_ref_addr = ref.getFromAddress()
codeUnit = listing.getCodeUnitAt(my_ref_addr)
codeUnit.setComment(codeUnit.PLATE_COMMENT, decrypted_string)
The first one has calls to: LoadResource;LockResource;VirutalAlloc etc. Followed by an RC4 decryption routine; -> Likely there to help decrypt that resource.
Followed by a function: VirutalAllocEx;WriteProcessA; CreateProcessA with the suspended flag (0x4); ResumeThread etc.Clear signs of RunPE injection.
By breaking on VirtualAlloc and comparing to what we have in ResoureHacker, we quickly see the resource is loaded at offset 1C. Shortly before, we notice an add eax,1c after the call to sizeofresource.
We see it's decrypted as C4 with the first 1C bytes as a key. Keeping our breakpoint on VirtualAlloc and keeping it running allows us to dump stage2. Stage2 at a glance looks very similar but out crypto scanner tools indicate CRC32.
Browsing to the VA indicated by the Kanal plug-in in IDA, we see: 0EDB88320 ; A quick google search indicates this is a CRC32 crypto constant. That subroutine is only called once.At the start of the subroutine, we notice other values like 0C1F3B876; 8197004C; etc. These hashes are passed to another sub with a call to LoadLibraryA; a sub that looks like CRC32 (because of 0EDB88320 being in it) and then GetProcAddress.
We see the crc32 polynomial used here: https://github.com/guitmz/virii/blob/master/h/heretic.asm in a git referencing virus source code.
After exiting the function. We take a jmp and exit the program. I changed zf again and this time we end up in 401d50 which has more crc32 hashes.The first call is CreateProcessA.we see it being called in the next subroutine at 0x401ca0. the push 4 hints to the process suspended flag. This is confirmed through debugging and processhacker. Once we attach to svchost, we see some calls to decrypt the following:InternetOpen; ... Followed by a call to strlen. We follow the string address in the dump and find an encrypted string.We then hit a small decryption routine and see our string decrypted to https://pastebin[.]com/ ; It shifts left the bytes by 4 (swapping them) and xors the swapped bytes with a key.0xc5 is the first key. We xref the string and find some more encrypted strings; We xref them as well. We get the c2 link and find the same decryption function this time using 0xa2 as a key.C:\Windows\System32\svchost.exe is the 2nd decrypted string. The following cyberchef reciped performs the decryption:
From_Hex('Auto')Rotate_left(4,false)XOR({'option':'Hex','string':'A2'},'Standard',false)
It pulls an image from pastebin calling it with the userAgent cruloader. Shortly after, it gets a link to an image, downloads it and saves it as XXX.png
Then, it resolves the hashes for GetTempPath. We see the value returned: 0379F904 C.:.\.U.s.e.r.s.\.A.D.M.I.N.I.~.1.\.A.p.p.D.a.t.a.\.L.o.c.a.l.\. 0379F944 T.e.m.p.\.2.\...................................................
We then enter a loop that tries to locate the string cruloader in reverse in the png. A decryption loop is entered which decrypts an MZ block by block. it looks like the block size is 0x40Looking at the key and chucking it in cyberchef, we quickly realize it's a simple xor operation.We dump the PE and notice it's a simple call to MessageBox. To automate extraction I went withthe python pefile library.
Printing the address where .rsrc starts, we see -> PointerToRawData: 0x12E00However, in ResHacker, we see the resource starts at offset 0x60 We previously wrote our RC4 decrypt function.
Resources:
https://medium.com/@duzvik/scripting-with-cutter-and-jupyter-notebooks-79d588e5fbb5 https://www.megabeets.net/decrypting-dropshot-with-radare2-and-cutter-part-2/
Didn't really do a write-up; just kept the ida python string_decrypt.py script for qakbot:
import binascii
import idaapi, idc, idautils
data = binascii.unhexlify("080F13AFF5FBD0AB13BD87FB75B9DC36F6060CD68FE453549FA5E5720942F44BE6AAC47204E79BC24DA55752451F524ECAD4F1E8EA49352C6482471A036CC00E281E278FEFCDD89202ADA4EA57D8EE27C52E07D6ACF54B61ACCAE37A0369FE3DCFBF875D0EE68A8449AD01754D1D2670FFDEE0E0EE585810669347125749F661090F00CAF4ECD7B73B8D91E646CFF321E36154828EE84B7EBCCFF67C0535A54AE8A5A9560CE19CBE1DE0143102164F4ADCD8E0FAF142173763994C2E121AE6076703199AFEFCCE8F18A5B6E64998C61EA81D4CC1A6E24B6DBDCCFE69433FAE37D2AEB0110EF785D44DAF5174531E061A8CFAF7FDD14E1C2669820A400005ED063D070099A1FCD28F0298A1EA59CFA878D1280791FBD26F43B1C6F66C023FAE37E4B9B66304E19AF651E00F314F0F4C77DED2F1ECED5F5800789343161244A14E294858CAF5FBD18C5AE4ACF65895BA2CF32D40A89EDE7C43B7D5E7312271E258F1EBF60151A5E5D75AB412775302061A8CFEE0ECFF58130C689C47010344A13839181D9AEFE7D3875882ABEF51EAE331F22404EDABE75A52AA87BA15176EE813C5AEA85415F0A9ED53A51A33051E040EACEAF3E0EA6A1931599F4C051B09CC09300F179E9BC7D39413B6ACE640F6EA27E80069ECBDDA4D58AAC0C5760369F25CED86A15C0EE796840CF00A11465C264E98BDC4C4E94D04262AA04B11030D830E2209189FFFEBE29504A8C2E559D6F46CE3390CA28AE15042BBEDF2711571E23DD786856425DCA0846DA5555252084753C9F6F7F0DB5437435CBB55030509A32A39091186FEFCDC9413A0C2D366E6DD27F2041BD0A6FF3F63BBC2D0731E6EE276E4B2C41104ED8AB964E5414C000E4B43C0D4FCECA377533057D6520B1351D84E2F37549FE8EBCF8E17A9A7BE6F9CE91F8C410CD0BBE24D11ACC0E0225638F41AA1AEB6435CB08BA453A55C2C05182609C9C5F789D0490214618556033009F722340C1BEACDC3CA8104A1E2D077EAD342C1241DF7BBE17C50BDCDF65A1F69F544C8A5A25E3695A6EA4BA5407F45196142D8FEFDE6F54513020A9E5616071FB944750F1AC4ECE7D68906A1A6EA5597F530E16E1AD6A8F95652F1C4E36F1D78AA49EEBEA7594EE286EF56B05775490C0857C2DA92D9EC431526798511503909FB1F5A2400BDE9E7C98520ADB0F741D8F60FE32C06D0B08D6C54AA85FC7D1B4ACA74D2AEB64708F68AA402E075745422444DC9DEE6A1BC5B1F2D67914F160456A14B7C4A5691F2E3CD8504B7ADED55CDF32DE80D0CD4ACE10258B3D5F66D0272E95CF5AEB9103DC9C1D81AA35D7E5431454EC1CBA0ABB72625267ED64D001D3CF104390F0799BBB39DA713B08DE15EDCF936AE631ECBA7E0585CAAD6A96D1E72F361E2A2A94753AFB8ED51F3004E701F4944C9CEE1ABB726133178A44716021EED4B674A1B88F1DECF8F15A1B1F01AFAE827E7350C8AEBA84C13F285FD6A1D71AB1DEFBEA81D41FB9AE816C0011167084852C5D3F7C0F058132F0AA643161F21E21F3902279AFEEDFCE0218AA7F777D8F421E32D2ACDA7E35A52AACCFC71434A876CF4AEB6483ED88EED51C07F74531E4740C9FFFDF1DF2C352678826D121202D01F351811EACCDAEEA518B1AFE646D8EE27D5241AD1A0E2514289A5C34D2E4EE249C4B9B65E139586B63FAE5765411D4F149E93F6E5F22C37356B855631010FAD0E220F74D9ABB7BDC546F6B7AD1189A837A8645990BCA01A01ECD0BC3A412FF212A4FBF04461DC81F05AB25C74542E5446CFD6C7FBF26D760B7E8252330209F11213041285CC8EEE850288A3F040FCE830E93369C9F88D6958ACD1E67E1D5BF558E48EBC3132DAA9D0688160547C204F44DED2E1E6F8582A0A648247101909F74B1F120486F4FCD8922A87ADE751F0F436E3261BCBBDF43F47B3CBF26B5F78FF588188B65400E18AD44DAF5174531E6727EBD8E6C4F148032F6FBE430C1300E62A5A04049B9BC0D89431A1B6C777F7FB2FE34124CBAAFF5042B1C3E71F5468A918F2E5E1424FB0DFBC47C0757454204943D9D1F7CFF740130D6B9B4723773FEA113F0512B8FEFDD29504A7A78359C9E86CE22D05A29FC04850ACC0B34F1E74E949E8A5A3310FE69FF60BEE567D4C6D706ADBDCE0ECBE7E133366975B62141EFA1B2E1F1DC4FFE2D1E0219783C05BD7F427E53569F587E84B7EAEC0FD5A1F68EA6A81A8A76217F6A7F74BEE5769456D6842D8FCE2E0DC5910256F846410120983382E183787EBC7EAE035B6A7E240DCCE2AF42408C6C9DF5A5691D5F6713A78FE78F98AC4114ED3EFD75AAC5431540855538CF2D9A79E0C033166CB79470431A30F3B1E15D7C0ABCEBD7BCEC2E856B9CA04DE0411D2A6FF4B72BBD7E74C0572F55881EEB71144A5DBFC11E54731055D125F8298E7A9EC4905792AD351420409EB342E0F079EA1AE989556A7ADED47CDE91DF2241AD6F3AD1A55FED3FE7B1469E25EF5AEA00B41B08BA45CB2577054085655C3DEF7FAED1656666EF66507032FEF022A081B8BE9EAF98102A5C2A667C0E936E32C3BCDA6F91A6D8DDCE0483E4AB109DDAEBC410DFA9DE14DEE5769456D4853C8D1FEA7FA401A435A97560A3403EE09330411BD9BC2D28317A884F151DC9A04EF2F0DF0ACFE5044ACC6F65E715EE24FF58EAA440CC696F74BA55F4254025442ACFCFEE5F14F17376FB74C063E02EA1F330B1883E1EBEE8912C4B5B234F7EE12F42E1DC7AAF96958ACD1E67E1D50E250EEB9BD3144C696F74BA55F434F025202F0EEEBFAC96321753EAA471A0700EC193F185A8FE3EBBDA319AAB6E65ACDB716FF310C98E9EC4F41B2CCF07E0574E853AEB3E94616E2C2E250B25F3C551F4A42C2DEFDEDFB4876077398430F1E0FC0043E0F2485F7E7DE9976ADAFE253DCB532EC310CC5C9CC5B5BABD6E74B1E76E253D1B9AD4708F98AE35AB3325645196B42DFCEF3EEFB7B760B7E8252330209F11213041285DA8EDC9006A8ABE055CDF32DE86E118FBAE55052B5D2F2691430E151E0B8AC3100E79BED59A151650E085E42AC98C2FBF14B042267B04B0E121FAB13625C5DCFC7C7D39413B6ACE64099DF3AF62D06D0ACFF6358BBDDE3731E6FE213E4B3A13132DAA9D0688160547C204F44DED2E1E6F8582A0E6395500D0403E51F7A2B1A9EF2C3DC8C01A5B0E668EAEA3BC8241DA29EC87A7A92FCB330353DD368C4E7937425B9BBCC6AE01D42744D1715968DA2B3AE1C760D7EA14D154158D21E3F180DA3F5E8D2921BA5B6EA5BD7CA30E9220CD1BABB0B31ACD6F27A1F75A959EDA7C4550FE68EF456EE567D4C6D7675F3F2E2ECF078351359994109121883393B1A0485E9FAFAB058808ECF34C9F535E3331ACAACE1531FBBDDF63F5354C265A1E38A5416B8A0E655A551650023435382EAF7EBDD401F2664820B4C3303F4053605158EC8FACF8918A3EAA45CCDEE32F57B468DBEFA481FBAD7FC6F1372FF13E2A4A91E12BADBB545A60B294B035F5E99DCE6E2F10346733BA91253591CF05A650E18D7AAA994DB568D87DB1491D427F16C26C0A3E85C45FEEBF66B5F4AE25FC2A7AD540FE1C6AA7BAF457F4C024743FFC9E0E0F04B5E64628256120456AC442D1D03C4FFFCD29014ABBAAD57D6F76DF56E0DCAF1EB535FACCAF479002CEF0CF6E4F40150BB9FF70EFF567D1D5C010E979DDBE7E8431D2627BB430B193BEC19310F06CAB6CDD28D1BA5ACE7149EBF31A16369E1ACFF4B76BBD1D07A0369EE5BE8A8A54504D687E556AE3279541956549692BDEAFA4258307A934706180AAD063F45078BF6FED18542F4FBB55F97F82BE87E1B9FF9A31A44DEECFD6B146FE958F599A15005D386E85AC06165523E5255E5EA92DAEB4E1B2A7EA5430F0700E61819051A99FEE0C9E044C48EEC5BD2EF32C7220ACDBCE34B62B7C1C41F326FE25CF5AE94430EF68AF74C97325954195668DCD8FCDBFB5D0326798263621E0BED04280F2B9FE9E2BDA802B0B2D051D7FE10E3301CC7BAF97A499FA5D06D147CF358D3AEA95E15F0BBEC4DA55375203B4F55D8C8F3E5CE5E19376F9556620005ED0F380D5A8FE3EB86A31EB6ADEE51ECEA26E7350C8CACF55A0AB3D6F77A0733E245E4F0A05306E386E148EE57694556494BC0C4F6EBF902133B6FCD41161101EC05740F0C8FA0DECF8F0EADA4EA51CBB427FE2452CCA8FB1154A6C0A852187EF552F2A4A2454FDB80F05AB31C7458081D74C4D8FEE5DB540626789F470C1409CB04291E5A8FE3EB86B313A78AE655D5EE2AD30847C7B1E83F76B2CAF17E1D41FC78C48EFC0123A3D7A90E8574250D5911649E90ABB9AF1B5B7633B316543654B72D692837979BEFD39310A8B6F134EEE82BF22439D0A6EE5A42ADE8F6721E6FFE3DD2BFA5520AC28EE854F6061143055448C1D8BCEDF24076136F93492F121FF00A3D0F23EAF0EBCF8E13A8F1B11ADDF62E860C06C6BCE15A02ECEBF667051DC949D3AEA55537FC9DF04AA15E5C45004955D5BDDFE6E849302A669363623105ED0F140F0C9EDDE7D18537C4F2B304B9A973B64127D68FFF5A5488CCE16B047CEB70E4A6AB4318958EE55AA2517545084F41CBD5FBE0F1461D2F67984D0D021CF219291E019FE2F8CA980FBDA3F934F6EA27E81501D0ACEC5B3193CAF76A1D78B40FC7A2B6421595CAF71F9C103557044843C3CAE1FCEE4817376FD61F422B30DF497F1928B6C7AC86C050E4E6F45DD7FE2DF1321CD2ADEC4B548287935B1471E249E498A14317FC8CE168C010345331555EDFC9F7E4AD1E2A30699E56030407F0453F1211C8BBA1DE9213A5B6E61496EE2CA6643A82E6F94D11FC80E03D5132F45EA1EE973122F09DF07BB5427D490E4753C9FEC0C5DD4318376F8E5662341EE60A2E0F2383F5EAD29733BC838370DCF627F2242FCBA5E87E31AD9793691C65E958F5CB8A4534FB82E54F965B7457224074C9DEE6E0F142761358A965070322E2063F2C1B98D2EAD88E02ADB6FA34D7FF36F22405CEACFF1152B1C8934F0372E458F2B8F70327FC9DF74BC07163591D5266CFCCE7E0EC49352678824B041E0FE21F3F3A0683EDEFC9853DA1BB8367D1F535D12807C6A6FA3F77ACC0F64C18798755B2CB835415D69AF64DA55C6564045442CFC9FDFBE76D76106F82020D1506D42613391198EDE7DE8556F9E2C451CDD520EC240AD6E1AF4858B0C8F472056EBD1FA1EDE4131AFC82F45AB2417E4E0C524EC3D3DEECE8491A7E639B5207051FEC053B1E1197BAD2E1CE2AE1A1EC5BCDC621EF2C1F90EBA43562BBD1B37C1E71C154EDAEB7115CB580E655977F5873085451C5DEF7A7DB5413205B8347100E44A1383F061189EFAE97C030B6ADEE14FAD30FD90508D6A8CB565DBB85C477146FE21DCFAAA95441A8CFA31AB3153309676048DE9DD7E8FD44562C689C640B1B09A302344A1785F7C8D48C13B7C8EC56D3DC2BEA2447E1A6FD4619FC80E03D5817C958F9BFC41412B09CAB5BB542784E1E5209DCD5E2B6F01153302C94455F521FA519674F01EAF8E1CF8525A1B0F55DDAFF11EE2405CEE7E84754E5F5F07C3F49CA52EFE5A14904AEA1D06D94617241030842D4D892DAEA4D0437599350141E0FE63C5A5B46D9B7FEDC9305B3ADF15095CA23F5321ECDBBE9135DBBD1FE7A1873AB0CB3F8F01D50A7DCB00AEC032313591311808CA0BAAA19407426C710514359B55C624645D8A8BA88D641FCFBAF058BA976B3775E9AF0BD1340A9C0E16B0831EB52F7AEE8580DFA99E146AF473D501F4F49CFD8E1FAB25C0330798F0E0F161FF70E28461985F5E5D8995AA5A0E0058BA96EBF78509BF0B40608F29CAA264824BE04ADF2FD0858ACD6A806F90B2819411F1E9584BEB0A7155A7A33DA1B4E4F54BB5362524CD2B7B685D84EFCFABB1881A27ABE79518EF1B50709E689AB274925AB05B9F3E80959B9D7A808F70526175A1110808AA5BEA91B417426C11555405BB4476D5D43DDACA28AD741F3EEB4038EB675B16D5E8EFFBB0907E893A5295D2BB10BB7FDF2074DA3D9B209F6043D165B10119A91A4BFA81A5A753CC00E544140B5476F5F41DFAEBB88D55AF1F7B6018CAF77AA745C97FCB80A1DEB90A62A4431B208B4FEE80454A0C3B10AEC073D145912139889A6BDB21842773EC216565B58B75F6E5E40C6AFBA89D442E8F6B7008DB676B2754596FDA10B1DED96A02C422EB40EADF8F70252A6DCB713F30122135E150B9F8EA1BAAD00457039C50E51445FAF58694647C6A9BC8FD244F6F0B1188BA870B4735B90E5BF0D03EC97A133432FB50FB3E7F60353A7C3B60DF21E231241140B9D8CA3B8AF1D477226C71353465DB25A765B45DBAABF8CCC47F5F3B20595AB73B7704593F8BC1300EF89A233412DB70DB1FBF4014DA5DFB40FF002210C5D16179C8DBEB9AE1C466F3AC6124E475CAF5B635243DCAEBA8ED247E8FBBB038FAF76B573588EF1BA0904EA96A12E5D2AB108B5F8F6004DA3DAB00CF2033D155915159D91A6BAAC1D5A7038C70E504640B2597619019AFEFC919313A7B0E64095E927F4370CD0E5EE505CAED0E77A0331E84AEFAEB61D03F48CEF4AB01E7541194745CDCEF7A5F243023679DA4D10160FEF0E76080199F2E0D89305E8AFE25AD8FD27F46D1DC7A4FD5043BFD7EA331875E64BE4A5AB4100E69CA851AF46794903410BC2D2E2E8ED5F012C78920E0C181CE21829463D84EFEBCF8E13B0EEEA5ACDFF30E8241D8EACF55E5CAEC9F633027CEA4DEDAEE85D0EE38AB50DF31E734F1E55169E8EBEFEF15E1D7238C50E0A1801E65A68595887E2FEDED144F7EEF751D4EA73B47245D6ACFE4B00EC96BF6E0678B60FB2E7B44650A7DCA84DAF5D65115F150BDCDCE1FAAF1E456F7A975111465EAF1B3B1907DBB7EFD98D1FAAF3B10795FB26EB280793FBA15E55B3CCFD2E5D6DE64EF2BCAB4305A4DDB713B05362531A4955C88CA0A5EE4D05307D9950064640E70E3C0B0186EFA2DB8F19A6A3F118DFF52DE02E068EBDE85241AAC0FE6F5D69E250F1E7B05412E19BE14CB41E65451E520BDED2FDFDEC43193726844D0D0340E51E39015890E1F4C79A5ABEB8F94E95E038FC6D11DAB1F5471DA6DDEB675D65FF45ADBAB54010E4C3F54EB1433D511C570BCDDCF3E8FF0017226B970E03160DAF182B06588CF2E2D8CC01A1A0AF52D6F56EEC2E0B8EA1E25254F2D2FC6D1A31EE53F5B9A55F04E1C3E750AE46634F014A42DE91F9E0F24013312691430F121FAF1B2803028BEFEB918D17B6A9E64095F92DE0270CC7E5EE505EB5CCF6331772F558F7AEB61D07E78AE15BAF5F3D53195343C9D3E6A5FF4F152C7F98564E160FE20F3F071D8BB7E8D48C13B7EEF45DD7FE2DF13245CFA6E35645B1D7BF6A1F76E952F6A5E8500FEC9BEC56AE553D4C08524ED8DFF7A5FA431B2263980E03140FE61829461985F5EBC4CC15A5AFF341CAB627FE3105CDBBE84D1DBBDDF0771073E058ADA8B14215FA82E14DEC517D551E5242DE91FCE6FC43123A26954D06121BEC193E461785FFEBD3811BA1EEE05CD8F425E32C0C8EADE84C5AAACAE3330278E448F3A2B0484DE68AE74AB2573D5018444BC5DEBEFAE75F022667DA510A1608EC1C7605128CF2EDD8CC05B1B2E646CFF331E93345D1BCFD5A43ABD6F66D5D6EEF5CF3AEE85005F886EA5EA45F784E414B5EDCDCE1FAE9430427269B5B12161FF0472A0B0799B7C2D2871FAAEEEF5BDEF32CAA3108D1BAFA5B1DA4DDF0691373AB47F9A8B2534DEF97E75CB8483D5A15455FD691E3E8E45B053B6F92414E060DF91C2912589BAAF98F8545E8B3F451D8E926FC390A8EA8FE5B57B9CDBF7E0279FD45E2E7A54205F19CE513A14175530C0A56DBD8F3FAFA0007346F9355135B1DF40E2D1B5884F2E3D9815AA5A6EE5DD7F331F23308D6A6FF1370BAC8FA715D7CE350E8A5E85050F7DDE70CEC0360121A1542808CA0BAAA5D012678DA13504458E209390E58DBA9BDDC9312E8F3B107C8ED27AA705B91A8EF5C1DEF97A02C432CAB0CB3F8F6004DA4DDB70EF2013D6A0C4B42DF91D8E6F6425A11659447100340CE023902158FF7A2EA891AA8ABE25995DE23F0280D8E9BE45C59BFD7F7333275E64FEDAEB71D2BFA9CE14FA81E4548024B46DF91D1E1EC45053765864A070540C70A34031186B7DEDC951AE88FE246D2B606E92F08CEADA17854B1D7F47A5D56E253EFAEB0594DC69BE149A55C3D65095146DED9BECBEC45172D26A44D0C1600E7471B040082F4E0C4CC3DA1B4EA5A95D723F43845F2A8F94D58BDCCF2333D74E959E0E7865013F78EF65EEC777D49174745C9C9FAA5D449182D639047105B21E219330B58B9EEFDDC8E5A89A3F153D8E827F26D2DCDBBE24B59A789DF76027CAB73E0A5A7484DDE8EF65AAE1E534519525E80F5F7E5FB425A106B9846101640C704340415C6D8EFCF8F1AE8A8E259DCE96EEC2E01CCE5FF5053BBD7E7331C74E455E0AEA81D16FC83E856A15F3D440C504EC891E0E0FD4417316EDA410A161EEF0E29461E85E8EBCD885AB0AAEC59D8E96EE5291BCBBAF95041B6C0E133157CE954E4A7E84100E083A852A1407A0C094949CDD1F6A5F94919316D930E091202ED0E2E025899EFEBCB8518E8A7E743D8E826AA231BCBA8E31343B1CBF2731531E653F5A3AB5F18B984E149A95C3D4D0C545E80CDF3FDEC45152A6BDA4E0B1908E247380B0688FAFCDCCC13A8ABF955DBFF36EE6D03C7A7E35657BBD7BF72106FEE5CADB8B14200FBC3E95EB255705208520BC8D2E0E6EA440F6F669F51035B02E20539135881FAFCD88E5AA6A7F740C0B62AE32D0CCCE5FE5E5FBAD7F2331572E953E0E7A75013FA83A85DA14174420C4A4B80D9E0E8F943186F6C994D16150DEF0776070199EFEFD3875AB7B7F351CBF723E86D5F9BFFB40908F2C7F26B1C7CE911F5B9B14215FB80B53F92467D7308526BCDCEE6DEF74245714F84500D056CD3390538118BFF8EEAAE13B087ED41D4C827F52E1CD0AAE8683189F7C05E5F78FF5881EEB76D44E6C1F25DB33255451E5255C3C4C5E0F04819340AA56D24233BC2391F363983F8FCD29319A2B6DF63D0F426E9361A828DE85954B0C1F66D2D58FF5EEDBEB7580EFB9CD86FA14679536D4245CBD5F7E5EE02122F66F6540F1309E11E3D6A269EF7C9D89420A1B0F05DD6F442D1153AF3BCE84D488BD6F66D2572EC58EFCBA75E0FFB8AE74BC01734052F6973F3F3DBCAD50953660AB5501B0718C502340E3BA3DFC7D38619C486E658DCEE27D33305E1A8EE57549BCBE76D084A876EE4BF874413E78AEA4B845B63450E5248DEC4D389FF5A15366CC5104C1300EF6B141E3798FEEFC98525A1A1F75DD6F442A4641AFEBAF44C45BBC8A02D2D6EE455F5AAB75A12BB8AFC5AE2123E64286A62F8F8B2A6D80C591744D60711773EE60A3E2C1D86FE8EEE850282ABEF51E9F52BE8350CD0C9AD4D54B8C0E17A0320DC18F296C47E11F081D44DAF5174531E26169E8EA6BCA81B4E7A3AF6482A0F0DF01F1E091099B2E1F0834BAEB4EB03CEFE17EE390AD1ADF90D31FBD6CF4C086EF358ECF8F66D36FC81E050B741414F1A4355FFD5F7E5F270007224C67E12181BE61929021186F7A0D89813E4E0A743D0F426E9361AD7B9E95E45BB85AE3F2D3FA24EDDE9FF1147B5CBF356AE567E571E5357C8DCE6ECBC2C262C798273171E18CE0E2919158DFE8EDEDA2AACABE151CBFC2BEA6F1ADBBAFE4C3198CCF77B1D78F513E4B3A10A12F482F40EA51C7458081D54CDD0E2E5FB02133B6FCD5017191FE2062A0611C4FEF6D8DB1AABB0E744DCB427FE2452D0ACEA4C59B1D1BD7A0978BC7CF4BFAB4314FB9CAA5AB8572A441E484ECADBBCECE6494D1548995A36050DFA453F1211D1D3EFCE883BBD84EA58DCE96CE3390C9999FF5052BBD6E057107EEC58F3E5A14904AEBFF650A35F7E4E43435FC986C2FBF14F1B2C64C0164C1214E650340F0087F4E093850EA1F9F559CDF52DEA320D8CACF55A0AA8C8A07B0278F54BE8A8A11F04ED8ABF6987736454057542DECBFBEAFB02133B6FCD5210470FB0132A441192FEB5ED9219A7A7F047F1FB21ED241B8CACF55A0A9DE3D53F3465F751EEB9A1434FF097E104A4477C500E475782D8EAECA57B1F316F854A030507AD0E220F4F83FFEFCCCE13BCA7B85DDDFB33B07547C7B1E804658EE4E66B1E5EE853EFAEA7454FF097E1049257624F185444C9F5F3EAF549046D6F8E47590101E2082E02189AB5EBC5854D8B8ECF6DFDD805A80431E7F2FA565FBAC7F4311465E206E3AFB71C17FC9CED50AE1F704708485381D3F3E0B0490E26319446115A1AEA1833051AC7FAFED49358A1BAE60FDBFE31AB3700D1A0E2511CBFC2F6710530E64DF1E5A14904AEA2F153B45B504E0C4A5EDFD4E1D6E81D587324C41B565909FB0E611247D8FFECDACE13BCA7B862FBF53AD23308DBE7E84754E5F3D170094EE24FF7A2A7544FF097E1049451615604435082D8EAEC9E42053039D8460E1B6CD0241C3E23ABC9CBE1AD1FA7B0EC47D6FC36DA1600CCADE24842FEE1F6791473E358F397974118DB8AF03FB35B65450C4251C5CEFDFBB04F192E319754050304F10E3B1E188BF9FD938319A9F9F055DFFF35E32347CCA6FF4B5EB08BF0701C1DD170F6AAB65441C6B9C37EC045621232151582D9FEE59E6B13375C994E171A09CA053C050687FAFAD48F1885C2A664CBF525F42004E4A0E15A42FBF9DA710578F553E4BFE47419E583EB4DA5404D49085E57C0D2E0ECB0490E260A935A121B03F10E28441192FE8EEAB42582B0E651F4FF2FE93310A2A7FD53318DC0FD7B3C78F44EE0ACA17061C3ADEB47965B7545022674C9C9DCE8F34912106F9557101E18FA22340C1BAB9BC0FCB45B948FD3149CEF62F22219A280E34B54ACCBF66B2068E24FF88FA54500D499E556AC53734C082668DCD8FCDADD61172D6B914710206CD01B2324119EC9EBCD8F04B0ABED53B9D930E3201DC78FE4535489A5D07A0369C659E588907D22FA81F05AB846454F3E5248DED892E7FB58052B2A9746141105F10E2D0B1886BBE8D49213B3A3EF5899FB26E2611BD7A5E81F5FBFC8F6225338F41FA1AFAD435CFC81A45EA346784F031B46C0D1FDFEBE5C042C6D84430F4A4EA618784A1184FAECD1854BBDA7F034DAE921F42819D6E7E84754DEF7E7733F69D449E0BFB14235FAABEB4C8540634F1F2677C9D8F9C4FB5F05226D9363622202F10E3D03079EFEFCFE8C17B7B1C234FAFF30F2071BC7ACCE5A43AACCF576127CF358C2A3A5580FD081E356AE57110018544B91E6B7FAC32C0126689F4C08120FF718740916EACBEFC9883BA5B6E05CEAEA27E51669D5B9EE5E41F0C1FF73714AEE53E5A4B34250A5CFC15BA7573168195257FDC8F7FBE765182565D66017104DA24A5A4F07CAB9AACA8918A0ADF447CCEA26E7350C82F4AD6313FBD6CF3D4A3DA11DA5BCAD5F05FA98F74AB0567054080427DFD5F7E5F21F446D6E9A4E623918D21E3F180DA3F5E8D2921BA5B6EA5BD7CA30E9220CD1BA8D1F52B1CAF8761420DC18F296C47915E19FD75AAE5643451C5342DFC9C589DD4904374B924621121EF7023C03178BEFEBFE8F18B0A7FB40EDF511F22E1BC7C9AF1A4282D6EA6C0578EA0EB397B75209E18EF754B31C745808040783FEE0ECFF58136325A477425522D74B1B3F20A2D4DCF4B42F9891DA67EDDF0FA46146D6A7AD1A42FE8AE76D513FDB1FA4B8981341BAA6A41AB310310F3E6507E3F3D1CCBE032C6325A57642525CB11E604F44D8EEAE92A522E4E7B306CCA067B6731CA287E84B64ADC0E15A1F68EA3DC2AEB64526F09BC76D8C717E4E19435FD8EDE0E6EE49043773F661070518C5193F0F378FE9FAD4861FA7A3F751FAF223EF2F69F2A6FE4B7CBBD6E07E1678C63DECA7B3433EE682F453C047634C00494982D9FEE59E7A1F317E83430E5724C76B090F00AFF5FACF8913B78BED75DAF603860807D6ACFF5154AAF6F66B3E6DF354EEA5853112FD83F35EB05B3F44014A27E9D3E7E4C9451827658151622D1BD21E3F180DA3F5E8D2921BA5B6EA5BD7CE2AF42408C6C9C34B62BBD1D0701F69E245F59FAC4304F48B847DB9467466084844C993F7F1FB2C25025CB7460F1E02D00E281C1D89FEA0D89813FF91E242EAFF30F0280AC7E7E84754DEEBE74E0478F544D7A2B64514F483C95AAD5D63596D5546C1CDFEEC9E7B25025993562E161FF72E28181B989BF9D48E1FAAA7F71ADDF62E86642BED9DD27C7E93F5C64B344FC97CCC8EE1312FE1A8E14B835D7F54085E53F8D5E0ECFF4876116F914B110309F128360B0799DEF6FCE044F7ECB70D97AB71A8725A98FEBD0F01DEEDE76B0152F758EF99A14014F09CF068C06545733C5342DEC4C1ECED5F1F2C64BF4C04181EEE0A2E031B84CC8EF39421ABB5B500EBFF23E21700D0BDF85E5D93C0FE700364B10981EBAC5E12E1D2DF1AB3083455300652DFD8E0B4C509051E2A8643110451D84E293779E09BE8D49213A2ADFB1ADCE227862508D6A8D25E57AAC0E11F3578E16AE8A5A05E16C59DEB5C813278116D7943C9DEE0F0EE58132724904B0E1257CE1E361E1DABF5EFD19905ADB1DC42B9D930E3201DC78DE44D54BDD1FC6D085C876FE4AFE47900E1CFD256B246586F6D6743C1D4FCE0ED5804227E995062203FC22C3F1E388BE8FAF89204ABB08359DCEE31F02244D1ACFF4954AC8BF667141DD75CF5A3875E0CF786EA5A81327753054954D8D8E0BAAC02133B6FF66B32344883283F1800ADFEFAF3811BA191F746D0F425D1412DC7A5E84B548DC0E169187EE23DC2AEB64522F980F75A93467E5208266FD8C9E2DAFB4212116F8757070418C6130D6A27A5DDDAEAA124819ECE5DDAE82DF52E0FD695DA565FBACAE46C5153D361C2BEB64304FB9BD25AB241784F037A77DED2F4E0F2493A2A79822203041BEB04350115C4FFE2D1E056EBA1A344D0F425A82411C7E9A05111E885A22D4633B713B1E5F51147B5CFF046B057310248557BFFC4E1FDFB4145715695430E1442E6133F4854D4BBAC989354C492D16BEEE82BF22469D1ACF96044ACC9934D147AC253F4A692500DE08AC53FA555644943435FC986F7E2EC4258267293220B1A0DE40E7500048FFC8EEE851AA2E2F751CAEE62C00020EE8CC91E10FFA5C0503749D07CD38E98660EE2D9B00CF27C7E44087A6AC5DEE0E6ED43103756A14B0C1303F4187A2E118CFEE0D985049891F34DD7FF3686610DC3BDEC026AFBD6CE1F192F874BD2A4A75A04E19C8449AD467E4F01554382D8EAEC9E4F1B272AD94142040FEB1F3B191F99B5EBC58556EB93F651CBE362B8614B87BAAF3F79AAD1E34C1473E36FE4BAB15412E1AE846EB55763592B534BC0EDE0E6FD490530439B43051222E2063F3D74CFC8F7CE9413A990EC5BCDBF1EE33919CEA6FF5A43F0C0EB7A717EF544F1BFF7034FF183E83FEE5670546D7169C9C9D3EDFA6F192D649341161E03ED590D6A24B9EFE1CF8535B6A7E240DCD32CF53508CCAAE83F6793D2F26D143DD170E0BEA0580E95ACE14DB47163450C5242EFD8E0FDF74A1F206B8247211F0DEA051F041383F5EBBD8100A3A1F046CFE26CE3390C99A8FB5842A8C6EB311465E206E0BDA35212E799E511A54A74200E4754C4D0F3E7FF4B132E6F9856011802ED0E391E1D85F5FDC9921FAAA5834F9CAA70DE64599091A80F038680A32D2930A20DB393E10153CDC2A10FF26A34105F7E0A898DA0D1BB1C441B27D312502F49B359024F44D8C3AB8DD22EE1F2B16C9CAA70DE3C69878BC26B6E8BF6D64D3552CA7CC885E13122E78AE079B25774205C0849DACDE0E0E84D02266590440B1409AD02340C1BEAC8FACFB404ADAFD434C8F82DF21E0ACDA7EB6041BFD1FB225638D41AA1BEB75413FB8EE95AFD1534734A0627CDDCF0EAFA4913256D9E4B0B1D07EF0634051B9AEAFCCE9403B1B4F44CC0E338862958A285E25E5592CCF16D106FFE7C819D894600E78AA44CA54067451F064AC9D0FDFBE72C1F3567DB4B0C1D09E01F740E18869BF8D09217B3A6F05FB9BF00C91520E6EC8D1152B8C293480374F358C7A2A85461D386EA5B835E7E53082674C9C9D7E7FA631005639A47620101F008290374AEF5FDEC9513B6BBDC63B9DD27F20C0CD1BAEC58549FA5B37A0969D854F1F69F1412C8CFE051B35C704D081B7C89CECFA9F643053764974F074A37A618074A0199FEFC80BB53979FA350D6F723EF2F54F9ECDE6211B7D6CC7E1570EE53BC90E1423CB580F7029B17627D4D5745C3C9CDFFFB5E052A65981F39521FDE4B3304079EFAE2D1BF02ADAFE609E2BF31DB610CDAACB064148DF8B36F0372E362E8AFF96A44E6B2841A934B6254084B75C3D2E6ACC27F0F307E934F514530FB1C33101598FFA0D89813C4B1ED4CD1F11DE42E1BC6ACFF605CA7D2FD7B713DDC58EFAF993B61C2A1E14B835E7E53086349D9D092CFF7421205638451163105EF0E1B6A279EE9DDC9923F85C2CA5ACDFF30EA2E0AC9ACE97C5EB3D5F26D1458FF5EE9AAAA560495BCCB7994655072287A6AC5DEE0E6ED43103756A14B0C1303F41806290198E9EBD39420A1B0F05DD6F41ED43407A2BAFF505EAACEFA6B7154E949E4B9AA5415C68AF06CB45365551E6546C0D1F0E8FD477600788F52162202F319351E1189EFCADC9417C4E2F646D5A719A3323482BCFE5A43E3FEB66C2C3DF75CF2B8F96A44E6B2845DA4537645035209C9C5F7B2E85F052678800C070F09B81D29191198EDFECD8C58A1BAE634D0A942D63306C4A0E15A78B3C4F47A217CF355819C977032F081E03F937D57743A6775E9E1C5E6E91A427038B84D061230CE0239181B99F4E8C9C037AAB6EA79D8F635E7330CFE9AFD467FBBD19372126EEF54E4A7A01F04ED8A841FEF4064004F042789FFDDDDC17A330D4EB9703D3E28A66B7A1F0686A6D598932BE4AEE109E2BF31DB610DC3BDEC026AFBD6CE127B1DA27FCE9F9B7C20D6A7CD71856D4475246202AC9DC9EBFB4B1F2D57FC2210040DE10A290F5A8EF7E2BDB213A391E640EFFB2EF3242CDA888D5B50AAC4CC761F77E25EF5CBB34512F49FED0CF21C754C0126449DBDD5ECEA6F033178934C162304F10E3B0E3D8E9BA1DF8F029BB1E646CF9A11EE2405CE8CF55A52ABD1F65E712EB60C8182AA5815FC8EE856BA5B7F474D4246D8DCF0E8ED49586D24F66146772BE61F1C05068FFCFCD29518A095EA5ADDF53586200BC1ADE85956B6CCF9741D70E952F1BAB64215E099F347B948116D2F676AFFD8E0FFF74F136D6F8E47591A0EE2063D1F1DC4FEF6D8E026969DC058D6E92786200BC1C9A86C48ADD1F6722372E849A497974812C2A0D309F46E6957045C46DED9BCECE6497666598F51161201D104351E51B6C8F7CEB73993F4B768D4F520F53807C1E7E84754DEC6FC721469A944E0A3AB5E4FF680E904EE5A7852020853DA86E1E8F84914316581510B190BAD0C35051386FEA0DE8F1BFFA5E65B97EB37E333108CB0EC575EB18BF0701C26E052EEACA85414E68AF65CAF5C6545035209CFD2FFB2ED4D1A2679904D101409AD0835074F85FDE8D48313A5B2F34797F62BF02447C1A6E00442AACAE17E1678A951E8BDA11F02FA82BF52A5416245034142DE93FEE0E8495820659B194C031BEA063D441785F6B5DC901FEAB1E84DC9FF6CE52E0499A4EC565DF0C2FC701671E213E2A4A90A4FF786EA58EE517E4D56564BCDC4E6E6F94D5820659B194C1A03F902360615C4F8E1D0DB58A9ADF95DD5F623A82E1BC5F2E55045BCC4E1311272EA06EDBBAC5312BB8CEB52FB517E4E194744D8CEBCE4ED425820659B1911120DF10832441999F5A0DE8F1BFFA1EF5DDCF436F56F04CBA7E95D5EBADCFC711D74E958AFA8AB5C5AF980FD5EAC466843024849C9DEE6A7F744116D69994F59590DEE0A20051A8BECFD938319A9F9E241DDFB36E3391ACDA5F84B58B1CBE0311272EA06ECAAAD5D4FE68AF649A9517453434A4EDAD8BCEAF1414D267E855B4C1403EE5074011D84FCA0DE8F1BFFB2EB55D7EE2DEB240FDAE7EE505CE5C3F27C147FE852EAE5A75E0CAEC1E35EB45D630E0E494A97D9FDFCFC401320669F41095957F90A340D1BC4F8E1D0DB47FCF2F05BD5EF36EF2E07D1E7EE505CE5D2FA731569E653E6AEAA454FF680E904B75773480C4844C9CFBCEAF1414D3768844712181EF745380F1886E8E1C8941EEAACE64082E932E72C0BCEA6EE5454ACD0E7761D74F344AFA8AB5C5AFC81F05AB25C7454404957D8D4FFE0E449046D69994F59590DE71C3518188EF6EBD98917EAA1EC5982E927E32A04CDE7EE505CE5D7A428466FA954EFADAB0A12FC9FF154B51C724F001D42C3CFF7F3F102152C67CD4C07000DF01B74091B87B5EDD3DB01B4B8E84597F92DEB7A1BC3ADE45E5DAECAFA710533E452ECF0AB460DF380F65CA51C724F001D09C1D4F1FBF15F19257ED8410D1A57EF04390B1882F4FDC9DB47F6F5AD0497AA6CB77A1AC7AAF84D54ADD1E67B1878F413E2A4A90A07F49DE949A95E7D45434548C186FFF0FC5E193479935000161EAD0835074F8BEEEAD49403A0A7AD57D6F779E2280ECBBDEC535CBBC1FA7E1272EA50F4A5AD5200E186EB51B31C724F001D4ACDCDE3FCFB5F026D69994F591C05FB0E230F5A89F4E3868D0FB7AAEC44CBFF31A82206CFF2EE505FBAD0FA6B5C6EE24FF7A2A75412BB8CEB52FB48684E0A4709CFD2FFB2B0191B2A64D8410D1A57ED0E2E0C1883E3A0DE8F1BFFB6F656DCF72DE134058CAAE2520AA7CAE66B047FE213E2A4A90A03E786E357B4517E56080844C3D0A9E4F14F1E2A6899564C1403EE503C1D1998F6A0D38502FFAFE65ADDFF2EE33847C1A6E03F61BFD1FB4A1F6CF252F5AE974100F68AF768C041735404554FD8BDC1FDEC7F02315DF661070518C6052F07378FE9FAD4861FA7A3F751CAD32CD53506D0AC8D4853B48BF470715EEB52F2AE975413E386E75A88537F44014327CFD0F6B4AF0A1B306DCB0711511CEC192E1949EACDE7CF9403A5AED346D6EE27E5352CDAC9A24B02DE80E0432264F449E4A6F7033DC286EA5BAF456270025142DEEEFAECF2402A353BD8123E0703F40E28191C8FF7E293850EA1E2DF169DED2BE82506D5BAF84F55BFD1F63F4C3DDB61DDE9E1423DC9B3A604E01431041A4F49C8D2E5FAEB5C12227E937E40773EE60C1E0F188FEFEBEB811AB1A7C234DAF726A82411C7E9A25C11AECCFD785130E91DB0FBE45D0EF68EE857AF4165004B0007DED0F6E0EC0C59102AD973425549F0495A02009EEBFD87CF59C481E646CDDB26E2023BEE8AE25145BBDDE74B1E4EF352F3AEC45005E38EF456F3003F44014A27E1CEDFF9DB42116D6F8E47623A03F902360615C5AEA08DC05E93ABED50D6ED31A60F3D82F8BD1101E585C4761F2BB306A1B3F2055AB59DF205F60A3F10440660C9DEF9E6B11E46723AC61352464CC502280F1285E3A18BD858F4C2C540C9DE27EA241DC78FE453549FA5FE2E714FE25AD0BEA14318C38EE84AA57769616D651DF0E1DBC7CA69240D4BBA7E3E2833E6062A1E0DEAB1A197E03FAAB6E646D7FF36C1241DE1A6E25458BBE0EB5E712EB70A818EBC4100FB8BC151B65B634F034B42C2C9C1FDEC45182479B722210509E21F3F3E1B85F7E6D88C06F7F0D05AD8EA31EE2E1DA287E84B62B6C4E17A3473F2508184A64500FC81D14CA5405047084853FFC9E0E0F04B76316F910C070F09A32A1E2E54C8D3C5F1AD2AE1B1A11496FC62A9354987BAAD1047FE87B66C533DA859A1E9E1424395BCCB7994655072287A6AC5DEE0E6ED43103756BB4B010503F0043C1E54ABF5FAD48D17A8B5E246DCC607FE2205D7BAE4505FADF9C37E0575F43DD5B9A55F12F98EF05A8D5762530C4142ACDCF6E4F7421F307E844316181EAF0A280D1BC6F4FED89217B0ADF118D8FE2FEF2F00D1BDFF5E55B1D7BF6A0278F511F1B9AB574DFA98EA5AB21E6453184755C5D2BEE8FA411F2D26BE723D3608EE023403079EE9EFC98F04E88AD36BF6ED2CE33345E1A6E04F50AFFADC681F78F511C2A4A94100E4B0C55BAD5B7F491E5255CDC9FDFB9E4D053462994D090F42E707366A0281F2FDD8CE13BCA7B85DCAFF31F43747C7B1E80452B3C1F2781473F313E4B3A1312CFC8CF650B35D7754284240C993F7F1FB2C3A2778B14716271EEC083F0E0198FECFD98404A1B1F034E3ED10E3321CCFACD95743BBC4F71F2774F549F4AAA8700DF980E77AB832584E194355C2D8E6D8EB49043A4586560B1802C26B1304008FE9E0D89439B4A7ED61CBF603861419C6A8F95A66B7CBF770061DC44FE4AAB05427FC83E17EC07A65541D6743C8EFF7F8EB49053742934306121EF02A5A2923B9FAE0D98219BCC2C046DCFE07E83404C7BBEC4B549FA5DA710578F553E4BF835415D98EF74B92576250024854C9F4FCEFF16D762A67974507580BEA0D5A38118DCAFBD8920F8DACE55BF2FF3BC7413AD6BBCE524190ECD21F3573F46CF4AEB6483ED4EFC256AE564649034248DBFC92FFF34D1537629A524C1214E66B141E3586F7E1DE8102A194EA46CDEF23EA0C0CCFA6FF4631F0C9FD747173E249F2A3E45708E78AF35EAC5E3153085207CDD1FEE6E9491233789945101601A3497F1956CABEFD9DA5388580CF71B9EF31E3335A90E7E9535DDEECFD6B146FE958F59AB15413ECA0F44BA95D7F776D6555C9DCE6ECCE5E19206F85512B1918E619340B18BD9BC0C9B004ABB6E657CDCC2BF4351CC3A5C05A5CB1D7EA1F544EFE4EF5AEA9630EFA9BA163934B6254084B149EE1FFE6FC5F0F2D69D8471A126CD42910353DADD5C1EFA57687B0E655CDFF11E3331FCBAAE86831AAC6E37B0470F713E4B3A10A16FC81E04AAD423F4515431CC9C9FAECEC49172F24935A074C1BEA193F191C8BE9E593850EA1F9E640CDFF30E520198CACF55A0AACD1E071187BE113E4B3A10A11F48CEF5AB4517050195355C993F7F1FB1715227A8257101202E61F740F0C8F9BCFF9AD3F8AE6837CF6CF10CA18498DA4E21F04DEE9FC701A68F77CE2A8AB440FE1BCED5B81326153194955C9DEBCEDF240760A648247101909F7283605078FD3EFD3841AA1C2CD40F4FB32D0280CD586EB6C54BDD1FA701F1DD45FE8AE805D0DBB8BE853C06E62465F0843C0D192C0F058133164935630120DE72D330611AFE3CFBDAC19A5A6D151CAF537F4220CA2BCBC3F609BE8C61F3873F358F3A5A14522FA81EA5AA34650202E4355D8FAF7FDDB421E22649547063C09FA3E290B138F9BFFDF8F029BB0F65AE6F737F224119FEEA84C16FED0E07A0373E650E4F6E31432B2CF845CAD563F4515430783FEB2D5BC5F02227882024D3A25CD4B7F192899E2FDC9851BF7F0DF57CAF930EF311D8CACF55A11F18AD6251B7CF15CF2A8B65811E1CFD81DE5414D02310407DFC8F6E1F84803300AB05612381CE6051C03188FDA8EDE8804ABAFE66BDAF22BEA2547C6A5E13F50A8D5BD7A0978BC56E0BDB04300ECC1E147A5325645197655C3DED3EDFA5E133079F6632E3B39D02E083924B8D4C8F4AC33C4A6E240D8C527E82569EBA7F95A43B0C0E7480374F358C7A2A85461C78AE55B90407E43085554E1D8FFE6EC557600788F52163202F606152330A3F5E8D2E05397BBF040DCF710E92E1D8795E84741B2CAE17A0333E245E4CB92730EEDA8F15AB34611440C5246F3DFF7EFF15E134379934C06771BEA053E1F199AB5EBC5857687A7F140FFE827E3023BEE8AE25145BBDDE71F0520A24EA1BFAD5C04A8B4A10FF2562B055D14439698A2BBFA01537338920D47475EE7447F0E29EADFE7CE9017B0A1EB79DCE931E7260CE3C9A87D7E8AFAC64C344FC97CCC8EE1312DF19DC850A156554C012609C8D1FE8900000000")#"6B21C8EC4DC0A1F930C1EEC2447967C7E88366606022CD8027674480DAA760230AC682EE865D4F32052F8E1C825A100EC54B6DC74A06306A1289C1DBC568350F5401FA935DD3A99C16D6F5D6607903F6B7AE7B6C7133F7832F6F0F81D095131365EB84EE895D0735192D9D4FC15E377EEA477CD26D0A2B47588398C5D4767B084F16D4D146D5A0810CE5E8DD757871E1F4F223352356F0972A6E4E9C87820C0C6588D9CDE87D1007122C8747D65E2D1BDA516FC15B6F3A7C5E9D99C8D7406D1B5773C7DF5CC988980CD6F2E1757860D48DB676766724EA9C116A4F96C69160360CDA82FE8945230A10308863DA3B0D12DE5051D5531F33047E949ED8F173771A5E20E3D15AC4C5A52BCCE9C6607030A7D1A57A6B7739F296166C5697DBB5080509C4AAFDD907523A0C309C43D048081BC54E20C3460A5F474F948DD8D75B711B5E10E3D15AD884F90FDCF4DB6B7877BBE99E7F055E39E1902A6612C0E7831814658DB4C4BC762F273F17A268E764352BE0662BA61B2D105062A7A9E2F6504A367237B2BE5ECCB7980FD1E9D9054F66F2C282766B5833FCA03E4221BBC79205120BCD82D88D5D2D1608368448E33B321BCE6162C94D0A146144F1A2D8F16D7D084F16C4DB4BD5AC9616B5D4C6556F6CE1E89167537A24F190276F6C97C489121965E693FFAF4C162C1336856FCC5D0F0CC4437ACF51015F56589685DFC67A6A2A5712E4CD6DD984F90D849AFF606E70F4EA97516A6B1785B212507087CC94193516CD84DF874207087C1C8749D15E331BDB5467C55B273E6A599D89ACD17076075E10E3BE49D1B59511D6FBC66C726DBAF5DF606D7C35EE92277544DFCF8A01130DA8A5C4AE7D35272E1AB771CD4C564A9A1040C95A0A034954929EC3C1707E1D6724FED04CCEB28A58F1FFD4607367F0FFAE40756A38E0914626728BDA92050D37C799FFCD75311F0F2B8E4B91093C13C6407DDF500C71614594ECE5DC6B7D1B5516E3F94DD5869617DEF3D7441D51F0EAA36660612FCC8B206C6A97D0A7602109C499E8895D0727123BA248CB4F091FC54B74C36D063B04539498DFC67E6C49161DF6D128E8AB8D1DC7F4D7715273F0E3B3134D6722F5AA36664FA0CC97150516DCB78BAD47170B2B368542CD4C137EDC516BD40D5D7160519DECC8D36B79365A15E3DB5AA193BB17CDDDC7606E7795EC81646D7C39EE8468674D9EA9B4050101F884E48B4C1115313A8649D042603AC7515FD35B1D265B7CF1B1A6B2516C2E5E07D4D146D5A0810CE1F2C0607C6795E99367644C33EB8146744C9BCAC610120ACB93F89B0901071033CB45D05E010ACC0229C3461F3E6A59D1CE89E13D384B1E20B59922A195AB27E2E8DB717803CFFAA07676663BE0B12E714493CDE60E1009A8B1EE9C6A17140E3A8552F653121BC84647C23E4A0C7D4E8589C1E070771D1E2FC4C75BD5A0944B87C6CA727479F4FF963D606B3385862E714E9FCCB903080CC492A58C450E6615328A41C7140717CF2258EB490E2D611D8289DEC47A6A495616FAD15AD8C5D91BDAF5D96C783ECEA8814E056038FD8D2D5C439DDB8205123AC58FFC864D62350C26A543D669050EC6507ACF50085F474F889CD8F37C691C5201F2FD4DD3B1901EDCF9D3717853E7E4847271761DE09C464A4F86CC940E0511FB93FFBB5D0312092CA847CE57021FCA490EF571290B537CA3A9F0FF767B1B5400F8D85CFD929016D1F5C5764140E0FF80766B6700E097356A4E9CF5B4150E65DE9DE29B4C4C03043AD04FD15E130CDF0C6BDE5B543C6959908BC9DC6B360C431697E865D6A48B1D95CCDB76696295E0C31357673ACB9115774086DC95340F21C785CE9A5B0D147C289F55C34B094D9B0C6ACA526F3C6C4F9E81C99C7B74053B3EFEDD5ACEB6961EC1DFD662782DF0F59713427622C6892F73439DC894042404DC978BAF4C16330E33A847C153053BC7567CDF7701396B6AF1B3C8D77C6A104B07F2DA06C7AC951D8ED7C769696AD4E3937F7C603FF6BA30036297DB92270511E697E68D7A161415318C71A268141FDB565DC34C19366758A6ECDADF6B77065700F3904DD9A0F92EF8EDD3777823C6DBB552056033F1903662519B87820C0C65F8A4D4AB450D15195FA248D65E1210CC565FD35B1D26405C858DEDC47E71055A11FBDB28F183A13DCDEADD776940F0FF8640717C24E0E53774489CDA92016001C982EAB74B0700132D8E26F25A1416E4437AC5563C2F615EA6ECEFD76D6C285F17D4EA64E2AA970CD0E2C6517250E1E28076053606F78A2171409FEF8F0C0516808EB3DE00473A35319F43D055050A896776D652002D614FAD85C9CA6F74064916B9DB50C4C5AA37F3CEE5444F46C9C09B70777C25EA83325F769BC7820F171688B2EE8E4C0C02192DB775D2422E1BDD225DE7682E3B69549FBFC9C069710A5E5DF2C64D9A96980EE6FFC0737460F0A3976B60133FE28B297144ADDC940C600CD895E4864F0B015C708A4ACE3B330ADB6163D677385F56499DBFC9C653791A4F24FED01B93808B0ADAE8B256786FF3AD8676766776C3A40F4F64B688C741602CC682EE9A4707123B3A9F65CD540B17CC6776E73E413B6549F1BBE2D76B57195E1DD2D05DCC92F91BDAE8D7567871E3E49176567B33E9896866599792B603032BFCBBE48607071E1964A572F06F331DC84C20C3460A5F57589F88E1D76C6B085C16D6BE4BD2A68B11C5EE9C60656695BFC13D312A78B4D6683012C89ED6505065C693FF9C4C0E0A192DC545CD566030DD6F6FD668063A737297BFC9D16B71065573C0F04DD5869816D6FFDE46726DFBE891676C7C38B7B246514495ED830C0511CDA0EA845C07277C128450C77D0912CC630ED5560328654D98C2C8DE73181F5640F3D358A1A6941C95B5D1256E60FDF993606E6078E09D23230EA3DC8312194596D6A9CD5A40661F328F08C743057EC7517D95100B33683DBD88DEF57A6C39491CF4DB4CD4B79C39D1FEC0606E7095FA97716C7D3CE08632700F91CBE62D2224E5A5EE9A5F0B0519718E5EC7000D1CC84F69D357413A7C58F1AFDED77E6C0C6B01F8DD4DD2B6B016C1FFC06B7C6FC28D8670757723E895686659979291090E01DD9BFBC64C1A03473A9F4EC749051FC50C6BDE5B54286D4F949FC4D36D73475E0BF2854DD5B19C0AD6FBC22B787BF0B68067767D3FE38368665997929601030ECD82E8895916130E3AC543DA5E5B1DC8527AD34C0A316149DF89D4D71F3D1A1B56A78A508FE08C5890AA867D3326E0AD8076762976A0966670449AF69205131192D6AE9D090109122C9F55FD4F050DDD182E835A4F2969599498C9D16B7D0D0153B2DA08C2B79C19C1FFC2777260F0FE812925363285AB3254539BDD83360917DC83EA8464070B132D9226ED4B0510F95061C55B1C2C040FF1BDD9D76D612F4E1FFBEE5ACEA69C0BC6D3DF647A66DBEC9F76521315D2B6276D4590C69E60360CDA82FE8945422E385FBB75D654121BEA506BC74A0A166A4E858DC2D17A18085910F3DB4EC6AD9012DEF6DF6B7273E4FF8167706521FD9C3C03019AC695145D3E8D85B1CD5C3F46092C8E549F60450DF4027EC74D1C625F1882B1A1B81F4F3D6822E2DB5AD8969C0BC6F3DD6B546DF3E2807E64673FEA8B1103479BDB83060F1D8693F38D294849565FCE75DB48141BC47061C94A4A03574482BBE3E5292C355E0BE7D247D3A08B56D0E2D7057577E1FD81292A3C33EBCB316A4A9BD9830409048699F98F0611121D2B82458D5A100EC54723D2511A3C6C128685C7DB6F7D0D5212B9CE46C6C5BA1DC7EEF76B686EC6F48167607E05F18A3466219CCC9201100C9BC4A58C450E663F2D9256D67E0E0BC46D47E27701396B3DB998D8C24E6D0C490ADED04ECE92F92BC0F8DF6C6950F4E0827F606015EA8B35664F86A9B505142BC99BEE8C7A0705092D8252DB720E18C6630EE7480E2C706E878F82D7677D697A37DAF76685C5DB5DC6C6C17C6E77F0E0C121596035ED9127704A81878318054788D9CFAD652732397FC4608214343089077DA66C0A3841538481FAD3736D0C7A73C0ED69E2AA9716D0F9C6057370F9E29D78706376A8943366538BDD9F100558E9BAC7C804160F113A8453D606514E897D62C25F1F715B49929C82D67C36365600F3DD5B8FE08A78E5FFD76E5066E6FE9374605256C69723625597EF8F0C0532A8B5F98D4816033A368743E33B514C9A163B90095766343DDF88C0DE1F71583B3FF8D143D4B5B81BD6F5C76B6950FCE9B313646126A5C8270310C09ACA100116DB81E49A4D4E361D2C9851CD490452C5477ACB5B0631280CC3DF989E2E2A5A0F46BB8F1A92F1CC4E99AB80362936A3BADE22372062B0D3713B0DC39BD55455539FCEB2C4185055486ADD119A025052D8556BD44A16736852878980DB73771F5E0AF8CB04D1B79016D6FFC1763173E0FE816A297E37F69123710D9FC6880B051C8497E98B1850555066D21F9B025947900E379F0756663D04DDD5958B262150174AAE871198E9C0418CA39E3C243AB9B4CB3F3C3F6EBDDD7E3B19CA91CA58585D90CEB3D0055A5E4467D31E8E035846911A229E0657672805C9D4808A2734511744A0891F96F2CE4F99AD85322A34A2BADE24322461B2D26A3416C59ED14C57529FC1A7DF1E554A4B68C7118E0D56489F143890084369320BC7DA9A84332E5F0D45A1880497F3CF4E83B684332B35B9BBC425292560A9D36A3614C79CD355555084C3BEDD1C57534973DE13970E554B85173B930B5A733108C4D980872A2D450E46BB8B0495F1CD4C81AE86313137A1B9C62731277AB1D1723715C685D25454519CDABFDC1D564A486BDF0A960F4C4A85113D950D5C6C370EDDDF9F812C2B5A085FA48D1B92F6CA5486A981362E2FA6BEC120292065B6C975300DC185D45252579AC4B9DA0550544E6DD9149017524C9B103C94125D6D360FC3C09E802D2A450941A5921A93E9CB5484AB83342C32A4BCDE22342267B4D4772F10C398D751514999C7BAD9184E574D6EDA0A930A515298132297125F6F340DC1DC9C823328590B43A78E188DF5C94885AA9E352D33A5A1C223353F66B5C9763A19C59FD354535799DAB2D01E5453486CD9178E0357489C163D940F43683208C5DF9E83332E5C0F40A58F0494F1CA4A84B686362F32B9BEC022292167A9D4742F5287D983124C16CD95F98D5D4E15192D9D43D0170311C4527BD25B1D736B4A9F89DE9E7D790A5006E7924CC0B1981AD4E9D729716CE1F8813F6A6137E689232F4387DA8F0E0516DBDAE689470301192DC752C7561011DB437CDF120637654B9482C3C27E6B1A171DF8CA40C8AB9E54DBF5C2646E70E2E28077297D39F58435700DBBC79205120BCD82A7814716030E318E528E5E181FC45262C3121C3E694D9D8980DE706E0C0A41A4924ACEB68A4987A99E727271FEBCC020297B39E880773112DEC49F1003549AC5A79C4C0F164D6DD80AD65E130A98103D8A4F183A350FC2C0DCC52E2A5A1701F8D15C90F7CA54C5FBC1762C31A6A18272766067B7C93662528198CA010408C198BADA1A4E071832824893094C1FCD4F67C80F432F654E829BC3C07B295B085FE7DF5BD2B2960AD1AB80296D62E6FE857C777767A98123654087C5924C060AC794EA9A050409133984498E4F0513D9566BCB4E432B615081C0D8D76C6C1D5E00E3925CC4B68D54C7F5DD716F6CFAF9DE616A7C22A98333604ADED39C1A1A1F848CF192534E1C0625C75EDA431806855A76DE4643277C45DD9DDDC36E69454A02E6CF04D0B48854D4FBD3647C2FF4EC9372297237E4C935724DDECF8F0C0549DF93E9C44F0D09503584448E530F13CC0E79C94C04736D53859ECDDC7A6C45581CF9CA5ACEA9951DC7B6D96C716FF0FFDE74647E33F6C936714884C892054C08C984E08D5D4E0513398D43C7170311C64967C312093076588789DE9E796A0C5E17F8D304D2B18C1CD0F4C6297C60F6E2877D713F37E68422664C9BC8CA060909CD85A79F400C021328980ACF540E17DD4D7C8A4B01346A52868280D371611D531AF9D904CDA08D11C1F8D729796CF8EC9B7D297235E68035700D9FC688051949CB97E6985C114A19279B4ACD49050C854776C5560E316358DD8FD9C16B77045E01BBDD44D4B68D1DC7B6DC6A7F6CF1F4DE706A7733F28A34670D91C682050E04C593A78B4103081B3A86438E5F050DC25661D6121C3A67488385D8CB336B0C5806E5DB04D1B09B14DCF99E766470E1E89F3F767B37E18A312F4E94CF8F030549DB83FB8D5B140F0F30990AD14E101BDB577DC34C432C6C5C838980D37B75005512F3D341CFE99401C5FBC1766A6CE7E9DE7E7C6337F6966A734081DACA2C0F02C198A78446050F12739B47D148171A855876C5480D312847898FDAD03362115810EFC404DBBD9A00CFB6C3646774E6F59777663F27E49F317059DED8D71752009BDAFA9F4C0315182593458E5A131ACF45668A5F1C3B7E4592C0CDC17B7C1A5A5FF6CD4CD2A4D509C2FFD376792FE4FA977672627AF492237450DEC78F0D04048497EF85400C0F0F2B9947D6541252E84663CF50433E6050988280D32E7A5B5840BB8F5993B2CA1D99AB80362972E2E8803F342165B184246045DE98D4530116CCDABADA1A13111973DA14915A021D85133C950D5D6E280CC3DF9E8333295B0842A58D04EBA4941DC6B6F86A756DB9DF9D71606122A9A82F604993CC8A4C370CC49AE289444E221D2982428E69091DC1437CC2122C37654F9D89DF9E55771A5E03FF927CC9AA9419C6B6F16D6F6AE6F99D636D7624A9A1276D4897C5CA300110C4DAC6895B094A38308547CE5F4C39CC4D7CC15B431461539F89D8DA334B1D5E05F2D004E4A18E19C7FE9E476F6AF4E3DE416A7D37E9816A424F86C1890E1949E393FD81474E2B1D2D920AF25A140CC04167C71223366A5990C0EED36D7A084912BBFB44C8BF981AD0EEDA295766FBE39B7560617AC884346A40DEFA9313010B84BBEA9A4E0314192BC762CD490F0AC15B22EA571C3E28739082CFCB3353084916F9926AC4B18D0199D2D769786DB9DE937D616137A9A1296D4F9385A501120AC4DAE1894407155035844ECC171211CB477CD212023667559089C09E687105571AF6D304C5A48F11D1B6C06C7E6BF4FF963F667B37F78923700D98C69505100D8482E387440315503C8354CB481411D94A6BD4120B3E6A54948080C27E6D05171EF6CC438DA19616D4F6D6297A66FAFF9576297833EB8B237749DEDA92051600C6DAEE8C5E031418738954CB5A0E52DB4D60C7520B7365538584C3DC6634025E05FED004CCA48B0199EAD3716F6AF6E4933F697A38E1846A614080CB87120149CD9AE2924800030837C74CC7550E17CF477C8A530E2D6D5CDD9FD9C17E76455612E5D949D3A08D54D1F5C06A696BECA19E7A76727AEB84286058DEC28712050B8494EE9C5D1B4A143A8743CC17131FC7467CC7120B306A5390C0CFD36D77051711F6CD4DC3A4951499FEC0647A6CFBA1947C6A6734E4892A2F4C87DA92010E028485FE984C100B1D31C7109B0D5948900E6CC74A023E6A11859ED9C16B76060A73C4DB5CEDA48A0CF0E8C06A6F03C2C39767447732C68A286D4491DD8F0F0E57FFF6B8D811620E082B9B5598144F7ED2073E94664A6F3665D4DC9EEA3A285B635EB28E1AF9E0C94AEDB797352F5BB0BDC04B283666B7BD633313AA84C350523D8DC6B9B00C5254247ADB14FA1E504CF1073E9466125F474F889CD8F476760D743AD3F746C7AAF93FD0EEFF606E70F4EA974405503AEA96234B409CCD8A05600699F6AE9B75111F0F2B8E4B91093C7EFB476FC2780633613DBF89D8E177791B5E36F9CB45A1958B17D3F3DE60546EF4EA974364673E8596236D45F2898318143AC186B6B30C113B5C3B8555CC5A0D1B94792BD5634F376B4E8582CDDF7A25321E00CA9E5DD2A08B45EEBFE1583D67FAE0937A6B2E0DA0B61B234881F687040D0CC6CBD0CD5A3F46132CD67D87483D5ED84061D261193A764E9883C28F443D1A6653FED05BD5A49514EAEEDB68783ECEA8814E25762EE0D81D2672AF8996120F01F79FEFD5724715215FBB74FD7C050AEC507CC94C6F377049819F969D307B0D555DE4CE4DC4A1961E9BF7D72A6E62F8FD9E7631236FB38E6861489C96945D504B8D838BBB4C1646133D8171EF72331BDB5467C55B4F62247A9498E3D0757D0A4F5BB5C941CFA89E15C1E988273D25B5AF897A686333F796296D4086C0890E2C00DE93E7D5400F16192D9849CC5A141BD40352FA10337A67529E98F0D176751F0951BEB47BC4B1D917D7F0E2777260F0FE8133383311E09109614B97CA92484212C198E68F441615462D8449D6670317C4543C9C690631370FAEBCDEDD7C7D1A4851BEB44DD3B7AB1DC1EFC06B3D3EB5E29079556139E68035700FB1DB8301140080D4AE9B0B4E46122A874A8E1B0E0BC50E2EC84B0376047385BBDEDB6B7D3F5201E3CB49CD889C15DAE8CB055377C2E28525314133E481106A5386DC870C2D00C599F9911F56660D3D8452FD580F10CF7D7EC74A07622318A2CB8CC76C7D1B5512FADB1586E0AA5F959A9C667B6495C58667754033EB8114665087CC95143765F897FF806A0D0B1E368543F53B231BDB5649C34A2C3A7649988AC5D17E6C0C781BF6D746A1AB8909B5DED7697877F0DE9761737A35E0B246506EB4FDB1213220F4BBE28B5B0D1513399F7AEB55141BDB4C6BD21E2A2774519E9EC9C0435B065F16DED05CC4A28B11C1E3B2687877E6FB913E767624F380342D448ACCE6231200C982EEB85B0D05192C9867D16E131BDB750EC75F0D3C6058948ACBDA767103501FFAD047CEB5880AC6EEC7706B74EDF48B69053379F790662103F2FB83072317CD97FF8D62071F3927AA26E1013C22E06C5AE36C211E4861ADB3F3D772681D4273E4CC47CEB19211C19AF560694EFAE9877F605B37EB812A6660F2FEB5213300DCBAEA9B5D27140E309926EC4F3711DE143AF74B0A2D7D749F8AC3C072791D521CF9EE5ACEA69C0BC6AC86054E6BF0E19E567D7635F091235421A1CC92250E11DA9FEE9B600C271F33AA26EC4F260CCC4758CF4C1B2A6551BC89C1DD6D61697D1AF3DA44C4B7D71DCDFF89767C6EE5BC973D606B33BE96276E519ECCC80518009384FE865A030B0C338E08C7430545C54D7CC24E0A71614594D7DED7786B015407B9DB50C4FEB80DC1F5C0707370BBE88A763E7725EB8C20650F97D1835B3627C78EDF9A481B4819278E1DEA5A1316E45B48CF520A2C2A58898997E26D770A5E00E4F649C2AE9C0A9BFFCA602653E7E2917E6A7D78E09D23387180C6850D0F0B9EC2A58D51075D123A9F4BCD554E1BD14735D0531B306B51828882D7677D524D1EA4DA5BC4B78F11D6FF9C606566AEDBB55270673ED68034754891CCC80518009386F9D84A511E0C718E5EC700300CC6416BD54D273E6756949E82D7677D527835D19E6DD9B59517C7FFC02B787BF0B69666686335E4956866599792B1091200DB9EEA9A424C03043AD04FC65A1150CC5A6B9D570B3E750BC5C2C9CA7A233D6B32E2CA47E2AA9716D0F9C62B787BF0B6A076767C23F786234B4091C283124E00D093B09E440305083787568C5E181B926D42EA672B1D4313B4B4E9896871075F11F0904DD9A0C21AD1E99F737470FCE29C3E647433EB916B6D409B878318055ECA92F8C55F0B151530850BC34B090D874776C3050D3B77108785DFDB7076445A14F2D05C8CA489089BFFCA60264EE0E1867A447D37E99C356A52ADDFD74E504B9ACFBFC64C1A034727D814C6590750CC5A6B9D682D307C69838DD59C7A600C0025D5D150F2A08B0EDCF9D72B787BF0B6A67075653FE09268665997A985121915DC83E2C64D0E0A7C3A9954CD49400CCC5133811B1C782458839E91977B38055E1DAA9B5DA1A08108D9F5C0606F2DF0F597136B7622F68D66624584CF8F120512C99AE7C84F0B1419288A4ACE1B011ACD027CD3520A7F6A5C9C8991903A6B4B1B17FECC15C8ABD919D6EEDB6A733EF4E19E7C723326F78A2171409F94C44513478893E5894B0E0341268E55A275142FDC477CDF68062D70489080E1D772771B4273E0D647C0A890589AFBDE691D60E7F48267362178E1892A030187DB8A5D3B40DBABAB8C4816074104CE55FF366A7EE04C67D2570E336D479882CB927B791D5A11F6CD4D8FEBD778F2FFC6487267E0E197556C7F33CB842B6660F2C3AE180116DCB2E88C5A4B09313CD64CD4535709CD7766DE5D1C3B700FF1BAC5C06B6D085723E5D15CC4A68D3DCD9AFC606954FEFE8672427622CC8B206C2193DF81031317DE8EA58D51075D1D298C55D4581850CC5A6B9D5F1938674E839ACD9C7A600C3B3DE3EB46CCA4892EDCFFC54A7B50F0EE867A6A7D56E497326A4793CA924E051DCDF6FD8548011214339B08C743057EDA407ACF4D072B046F909CDCDD6D6C2E6B5DD3F264A1979C1FE4EFD7776455F4E18776406B1785A6346645B7C7930D0517C982EEA929260F0F2F8A52C1532D1BDA516FC15B2E5F53549F88C3C56C29591B36F3D94D818D8D0CC5CBC7606F7ADCE3947C255123E2C4672221B18DE621040FDD85FFBC460903120F994FD4520C1BCE477DA67D0A2D70728189C2E16B771B5E73DED05CC4B7971DC1C8D7647945FCE197567D5256D6872F66659EC5C8040C09A8A5C4AE7D35272E1AB76BCB581211DA4D68D2622236674F9E9FC3D46B38285507FEF349CDB2980AD0C6E175644DF0F9F27D696733F691662C459DC487090E3ADC84FE9B5D1146533E874AFD4F120BDA567DA66D0A2B42549D89FFD77C6D1B5207EEE928F3A09E2BD0EEE4647176F0C88A52053605FC9632664CA0C689144539FB8FF8BF66355048039351CB41010CCD0C6BDE5B6F3977559E9FD8D76D2B5B1516EFDB28F7888E19C7FF92565E50DC8DBA67716305E08B22514483DC83131420D0A18BBE401012093E8776D054141BCA560EF557153A6B5BA389DFDD6A6A0A5E73DED05CC4B7971DC1CBC7606F7ADAFD867A6A7D0185B30B4274B6E0A960170CC692E98F07071E1964A84ED0540D1BFC526AC74A0A71614594D7C1C17B7D1F1516EFDB13C5A79E0EDCFFC52B787BF0B69D7F696A32E782686659979285140608C798A58D51075D2C2D845ECB5D091BDB0C6BDE5B5431654BDF89D4D72455005801F8CD47C7B1D736DAEED7763366EDE8C9406D763AE9A03E734480C0830E0300E099F89C07071E1964B843C173051FC55666F377413A7C58F1BFD8C04B6A00562497ED4DD5B0893CDCDED7766971FAF4B676737A35E0AC28654EBEC095146033C184FF9D480E200E3A8E63DA3B084FA9726FD2562C30695F9882C9F31F7B0A6805F4F65BD5EB9C00D09AF46C7367D3E4806071553FE980070372BDEFB2372137EDAAC6814A10090F308D52FE76091DDB4D7DC9581B7F45538585C1D3736F084916CBFB50C2A98C0BDCF5DC764153F4F99A6005543AEA87276F7D89ECA3255855EAC0B3C51827204872DF11E1094D479913398B0B561A300BB0D498F42C5A2A4673C4DB5CD4B5BD11F2FFC6417875FCEE974160743FF691347A7180C696051211D1B78B8144030119709B4CD25E077EE7477AE15B1B1B47739081C9B27E6C475E0BF29E0DD4FFDC0D95B897763F23BAC4F242405E03858B2377019EC685010C02DA99FE982921030E2BAC43D67E0E16C84C6DC35A243A7D68828DCBD71F561D6916F6DA7EC8B78D0DD4F6FF60706CE7F4F250606122C08B336E6297DB9209060CCB97FF8D5A2B082F2B8454C73B230CCC437AC36E1D306758829FEDB2516C39491CE3DB4BD593900AC1EFD3695066F8E2806A05553FEB8108665986EF8F0C0524A8BBF8A55927081B718E5EC73B011FCC406DC25B0A36625A9985C5DD757305561DF8D15DD1B48B0BC1EFC77C6B74EDF48B727F1365B4D4463010C2A9B3100404DC93DC814706090B5FBD64CD433617CD4761A66D1B2D475081A2E5F31F501D4F03C4DB46C5979C09C0FFC171587BD48DA2415A4033F1A034714E80A9B5050C038882EE9B5D42293771EB6ED64F1031D94760F45B1E2A614E85BBACF16D7D0D7D01F2DB28E6A08D28C7F5D1447967E7E88160054033F190364748B7C7930D2400DE9FE88D600C00135FAD54C75E3317CD2260C34A1C37245B989EC9C57E74051B00F2CA08C0A99517C2FFD6756F6CF2FF937E253173F6C7662652D2ECA8212229EDF6C2865D0714123A9F65CD550E1BCA564FA65F0B326D53989FD8C07E6C06495FF6CC4FCEE99608D0E8D3717271B9EC967E6C7D3FF6913462459DDBCA151300DADAFB9A46044A13288543D017150DDC437CCF51433E6050988280FA4F47285F1EFED041D2B18B19C1F5C0295553CAC2857D60617AC68A2B734083F6A9170E00DADAC8874412070D00AA42CF520E17DA567CC74A002D046D8383CFD76C6B5A093DF2C65CA188901BC7F5C16A7B7795CE8076646733D18D34664096A9A2050C00DC93DE9A4521071F378E63CC4F1207FE225CC3592A317150BA89D5F76759697C16E3FD5DD3B79C16C1DEDB777860E1E2806A441376DE872364489CF4EC6045408DB4C4BC762C2F3F14CE03873B0313CD0C6BDE5B4F70471DADCEDFC67E6A1D1B5CDAF76681E08A24C6E3C171786EA6BFAE70767024EC95322D448ACCC64F4F20929CEA9E4811050E369B528267425BDA7E2CFA1C4F2C7159998AC8C76C184C680AE4CA4DCC979617C1BFEE606573F9E28076773D33FD8046210481F595191311CD9BB8DA751105142B8A55C9484E1BD1472C86112C2D615C85898C9D4D4D49193DC39E69F491B137E7D3E65C4150CCDEA656483176AA912823048189C91412458AAAA9CD5A3E445C70A2068748425E86714D8671211C411DDEB68C9D4C4C491E43A5CB1284F5CB0D95B5F7513D26A5BF8729202364F0E52D3221B1DB9F101430C686F9875D0705081B8A52C33B425BDA7E7DDF4D1B3A690EC3B0DFD1776C084818E4904DD9A0DB589AF9C0607C77F0ADDD676B3373D6C5697753D28BC31342458785E8C80C31661D3D8826824E121294792BD5634F336600AAC9DFEF3F7C084F12AAE50DD298F472B5ED83056F66F2A3976B603317C1A1662169B9E5AB3C45168AD6A48E094D125C7A98068D4D405C8C512C86110B7F261882CEACF6667608561AF4FD47C5A0A917D9F3D17C1D70A78DB576715E33F696276444B3A9A5051211EE84EE8D6A302A3F308552C743147EFF6F79C74C0A7F54529882D8DB717F691E00B2CD07C5B08911DBE9C62B6D6BE5B29C2E206070E7827B2652D4DBDB451565D994E49C76101312008653D65E18438E077D811E1A2C614F9F8DC1D7223F4C6854B7BE0DD4EBDC0B9BBFC12B3833ADF5F272616537F58C75310F96C58A60290BDC93F9864C16250E3E884DF7490C3FA9717AD46D1B2D4D6AF1C9DF92433A4D1E00B78308FD99A55A90E9EE59415FAEADD433213625D9C7464F4E91C88A261200CDF6E8D2753E66350FA802A2086028E4556FD45B4F0D614D9D8DD5B268680A5A03B9DA44CDC5CA488C9AFD676962FCE3A760606117E28028777286DB8F0E0765CB99E68D5D4C1F1D3784498C580F13920C66CF4C0071704BCA9FCDD47A7A1B5404E4D746C6EB9E17DAFDDE603360FAE0C974607C78F490237158DCD087080F0A8695E48512050913388743D748050CCA4D60D25B012B2A5E9E8197C17E740C4815F8CC4BC4EB9A17D8A1DD637B6AF6E89363756078E98C30660F91C68B5B1311C784EA8F4C4C0A15298E08C1540D45C4477DD55B0138614FDF80C5C47A360A541EAC905CD6AC941F9BF9DD682662E5E4DC606E6A26E0CB256C4CC9C487090C4BCF99E48F4507481F30861D8C590910CE0C6DC953542F685C8898C3D57E360A541EAC9045CEBF9014D9FB9C66726EAEA39F7C7F7A3AE984686C5395928E0F1407C984A58B460F5D102F8344D1150311C4196DC9501B3E674982C2C1C171360A541EACCD4DC0B79A109BF7C16B3360FAE0C970697A33EB91352D4C9BC782020F01D199E584400C03523C844B99570F07C84E7ADF5D00316A58929882DB777F47581CFA8506C0A89802DAF4D3726E2DF6E29F28646632E491237B529DC59314090AC685A58B460F5D113E824A8C48050CDF4B6DC34D41336D4B94C2CFDD72230C4F00EE904BCEA8C256DEF3DC623360FAE0C9636D7238F18A2B66478A87850F0D5ECE97E88D4B0D0917718849CF004E19C85661D4100C3069069583D9D0737D0A571AF4D5069ABF9816D2F59C66726EAEBCCA23767C3AF0912F6C4F8187850F0D5EDF9FE78C5D03081B3A85528C580F1392556BC4560E31675883C2CFDD72231D5901F2CE47D3B1D71AD0F6DE767276E1E5DC7D60676DF695276E439EC6850B0517DD82E28440161F523C844B99520E0ACC5060C34A423074499881C5C87A6A47581CFA8506C0A18E17C7F6D6687867FCECDC706A7E6DF68023684C9D87850F0D5EDAC1BCDF5B4C0F1239841DD152100BC25720C551026461528389D6DD317B065648F9DB5FC0B68956D6F5DF2B7E6DAEFA82696E6278E68A2B385393CD8F010C15C79FE59C07010911648451CE5D0F0CCA4720C55102642A50988FDEDD6C770F4F5DF4D1459AA9961BD4F6DA6A6E77AEBCC0242B2378B5CB77385297CA93120516DC83EF814C11481F30861DC45A1213DF4B62CA5B413C6B50CA81D5D06D771E4816E5DC49D3EB9A17D8A1D370796AE1F896762B7039E8DE226A469BDD870C0D00CC9FEA8B460F0B09318245C34F0911C75120C5510264695C819DD9D76C6C47581CFA8543C8BD9C01D0B4D16A7038F8F4817B6A6324E09668604E9F92850F0E01DD9FFFC55A07140A368843D1150311C41974DF50083E2A5E9E81979C2A7500555DF4D1459AAB9C0CD3F6DB7D3360FAE0C967707133E88A21764DDCCA890D5B1CC783FF9D4B07481F30861DC0490919C1566DC9480A7167529CD7C1DD7C7000591CE3904BCEA8C21EC2F7C068336DF0F9C97E607D32E089237A0F91C68B604010DA9AB6B30C113B7C02CB56C3481343F22278CB46302C725A90ECDEC17E7D07535DF3D244A193B40FD4E8D7254B4EF4F8967A6A1315E09732475482C58F030111CDB5D9A46A0D08083A9352A26A151BDB5B51EB5F0631046AA5BFE9DC6A750C4912E3DB7BC4B68A11DAF4C1521D42D9C1A740404105D5B7094568BEECE62E1426C499F88D290C03087F9D4FC74C4051C84E62A61B2D105062A4BFE9E05B57247A3AD99B28E5A0951DC1FFE1606F75FCEE9713524705C39723666C97C489121965FB93FFAE400E032C308248D65E127E8C6041F2772B7A04749F98C9C073770A5016F3FD47CCB5980AD0DFCA667562FBEA9713637E39EBCB237B44F2EA83121423DA93EEAB4C101215398245C34F053DC64C7AC3461B5F73549F88D9DF6F360C431697F05CF2A08D3BDAF4C6606577C1E58076647756CDAA13516DAB89C90D0F459DF6C7874609130C1E8845CD4E0E0AFA4B6AF13E1D30714994CCDCC076761D3B3DF2CA7DD2A08B3DDBEFDF057C70E2E59D7C6E6B78E1892A034A97DB88050C569AD8EF8445620F0A32C64FCC51051DDD0C6ACA526F0C6149D183CED84855206816E5C841C2A0D94595DDD7715261FFE891672D3121EC8B2B644C86DADC42404388D4F0814412030E2C8448C34F0911C76E6BD05B03626D508189DEC17076084F16EA9F74FDEBA55DD6F5DD714160FCE08421273A5CD6803223429DC5A0090C00DBD6B6C846000C2B12A275C7491617CA4720E3460A3C5548949ED59A3D4B0C5716F4CA088BE5BF0ADAF79246544ECAC9936764553FE98066544997DB83402E04C593ABD50945430F78C90FA87D0F0C89676FC5564F306657B785C0D73F71071B10F8D26EC8A99C0BBFF5D06F5B6AF9E8DC506A632FADC7637003DBA3A8051811A8B0E2864D350F123B8451E33B241BC5477AC3780633617CF1AAC5DC7B4A0C481CE2CC4BC484F93FD0EEE46A7176F8E8BB7D637C24E884326A4E9CFEE6290E11CD84E58D5D2D161931BE54CE7A6029FB714F885B173A045E9C8882D7677D491410B7CE41CFA2D955DBBA83353D6FFAEE937F6D7C25F1C560250180C48209124587A5ABC7784244592CC926F755121BCE4B7DD25B1D1C685C829FEDB25C7D1B4F32F3DA6BC4B78D11D3F3D1646966D6E29C67606B22D18A15774E80CCE62C0F04CCBAE28A5B0314051EEB47CC480612DD500EC5530B62351B9C9FCB8F3A6B4F4B1CE5CA5B9CC5BE1DC1DCDD777864E7E2877D61443FEB8129742181CC923F1517C4F6AB8D51075B277A987B82580D1AC54B60C303347A7760D19CC5D622434C4E2EB7CB5BC4B79719D8FF8F5E3870C887F244777A22E0A32F6F44F2869253600D9BF6C4984C0C353F128A48C35C050CFE2240E76A420F496DD1C9D9926B7B193B5CF5D15CFEB69C0AC39AE0717144F0F9A47677603FEA8B465472B3EE83142C04DB82CE9A5B0D147C09A651C349055EE8416DC3520A2D65499488AC926A6A050628B2CD7581B08A1DC7A7E9206E5EB5FD9360762E0DA0961B037286DBB514122CE9F6FD855A0115155FB843D67E0E1AE64448CF520A5F46448589EAD7717B0C1516EFDB28C2A48A10D8FBDC647A66F8E89C67667C38EB802577489DC79514120CC6918B9F5A50394F6DC542CE57602EC6517AEB5B1C2C655A94ADACF6716B384E16E5C777F6C58A11C1FFD3616B6AE6E2803D667C3BBE843064559ADB83011409C994F8C64A0D0B472C8A40C74C051C874C61D44A00312A5E9E81ACFE7B6A255412F3FA44CDC5BF11DBFEF1697270F08D9F63773D32E989462D448ACCE6101311C784EE8B07060A105FBC68C74F2312C6516BE3501A32045E9C888C9D7C381A5E0797DF5EC2B09F4B87B4D6697103F8EE817B6C763AE1CB237B44F2C0D2603004DC9EDE86581709083AB856C358050DFE227CD55F0D3E7758DF88C0DE1F4F2B712CDEF966EE97BC78FBCEE7565851BBC9B347055D22C4892A6C4293DD83360917DC83EA8464070B132D92268768190DDD4763F451002B2161A295DFE5504F5F0F2FF2C658CDAA8B1DC7B4D77D7803D2E886476D6133E481056C4F86CC9E14600399F6C6874D170A196CD960CB49130AA9716BD27D1A2D76589F98E8DB6D7D0A4F1CE5C769A192AA1BC7F3C2713350F9E897632536238FB62377019DCB8C372D2CFB93F99E4001035C62CB61C74F2F1CC3476DD2164D286D539C8BC1C66C224B1B55B79C53C8A8891DC7E9DD6B7C77FCE29C5F606533E9D82F6E5197DB950F0E04DC93F6C9753E48207A8849CD4F3C1DC04F78941C4655575885CCC3D075481B5410F2CD5B81F8D93FD0EEFD677766F6F9DA31727A38E8822B7752C8DB890F1439CB9FE69E1B58311531D814FD6B1211CA477DD51C4655614F83BEC9C66A6A071B4EB7D14ACB958B17D6FFC1763340E7E89367603B74A096642F019CDC8A0C4C45C683E7C4090C131076E171F1781217D95620F5520A3A741DC3DC9C82154B0C4F53F1CD4781F8D93BC7FFD371784CF7E79770713B74D686346A5186C088074E23C19AEEBB5011121932A444C85E030A8B0B04C04D007140589D89D8D75971055E5BB59B5B83ECF90ED8F4D3713366EDE8F25A6B6733F78B2377629EC695052804C692E78D2942491F7F9B4FCC5C4E1BD1472E8B504F69240CC3DB82823128470A53B19E08D5BC891D95B897764150ECFE8676682064D986276F42DCCC9E05424596D6A9CD5A406630308A42F05E1311DC506DC33E272B704DA099C9C06651075D1CD6BE08C5A48D1988C197764003DCE38676777D33F1B43366538BE69614090AC6B78B9C1447155C2B824BC7063B5B99106A9C1B5F6D6007D4DC9ED6323D590917B89B1893A1D65DD1C7B2554F5CD2E8865D647E33C38A344A4597C79209141CA8D6F98D4F0714192DD67D87483D7EED4768F157013B6B4AA19EC3D15E184C0B41E2900D91F78C5690AA80703026A5BF873C202364F0CA63331587A9C3331916DC93E6BA460D1259038E5ED2570F0CCC5020C3460A5F4A49A099C9C06651075D1CE5D349D5AC9616E5E8DD667870E68D9C60756162AB812A6F2181C88B100C00A89FB8E80C321413389947CF7D0912CC512BFA77012B614F9F89D8925A6019571CE5DB5AFDAC9C00C5F6DD77782DF0F5971320402FF691236E739DC692453C36D185DCA77E545220328444D1420E1D874776C33E19327C539498ACE24D47264B16F9EA6BF196961BDEFFC6056E6BF0E19E20373D32E9894623499DDA925D3B65EF93FFAE400E033D2B9F54CB59150ACC5159A6634F2A775883D1F7B27B761A5A03FE904CCDA9F928D0FFD9487870E6EC9576521315E09732405397C892052300DA82E28E400107083AA84EC3520E3BC74567C85B6F0F76529289DFC12C2A2F5201E4CA28F3A09D58FDFBC6254B6AE7F9BB5C057A6485B632624299FE870C0B539CF6C88D5B1627183BA874EE780F10DD4776D26A000C70528389ACF57A761C521DF2F746D5A09578E2C9F356786DF18DD7514A4709D0B603516FB3E4A345604BC498E0E84D0001143A87568C5F0C12A94378D6100A2761069A8DDAC66D79101516EFDB28EFA08D39C5F3F0707B65F0FFB461607656D680327651B6C0A1051426C497F89B6D07100F1EEB65C7491438DB476BE55B1D2B6D5B988FCDC67A5B015A1AF9BE58CEB29C0AC6F2D769712DF0F59713565C10D1B2075164AEE48F03120ADB99ED9C75350F123B8451D11B2E2AF5617BD44C0A31706B949EDFDB7076356B01F8D841CDA0B511C6EEB2737067F0EF8774054F25E3D768674D9EA9A5120504DC93DB9A4601030F2CBC26ED4B0510FD4A7CC35F0B5F47588398EBD76B5B3B7730F8D05CC4BD8D28C7F5C2606F77EC8DD760253172A096663E01AE8BC3133C4793D6ADC80D47155E5FDA08CC4D100CC0546FD25B00396254928982DB717E063B3EF8C441CDA9985780B482253554FCE3967C726076CBB1663211DC99DD40370CC6C0BFD3091A504864CB54D401564687122786790A3C6F52DEDE9C832F28580B42B7F841D3A09F17CDB5843D333395FBA17C667833F196464A4F86CC940E0511FA93EA8C6F0B0A195FB852D068140CFE2266943E2C3A7649B79EC9D75C7D1B4F1AF1D74BC0B19C3BDDFBDB6B586DF2E49C76055024E08432667397C489140531C084EE894D622F122B8E54CC5E1439CC5642C74D1B0D614E8183C2C17A51075D1CD6BE69C5A89016DCE9C6777C77FAFFF2335E7638E1B84C034593DD873F090BC293E89C293507152BAD49D0680910CE4E6BE95C053A6749F187CEB27A7F1C525DF2C64D9AA0920ADBB4D77D7803A6BDC51372713CAB82290372BDEFB2372137EDAAC6814A10090F308D52FE6C0910CD4D79D51E2B3A62589F88C9C0435D11581FE2CD41CEAB8A24E5FBC66D6E03C5E2816754663FF1A823705293CE83603A12F983EE9A502B081A30994BC34F0911C77666D45B0E3B045394988CC177791B5E73B2FC67F59ABA37F8CAE7515851DBCCBF56201301F78C32667180C685051316E593E6875B1B66122B8F4ACE150412C5226CC25F083A6A49DF89D4D7246E1A4816E5C806C4BD9C43C3E9C1606F75E5FD9E3D606B3385AD327751A1CC88043200D983EE9B5D23662B118E52E7551513FB477DC94B1D3C616AF1AFDED77E6C0C6C1AF9DA47D6808139B5D3DC717871FBE88644777A22E0A32F6F44F2FEA3252B29F1D6A4AC0936333973BC63E6173436FC0221F56A4F6E3607C1DC96822F182A4916F6CA4DF5AA9614DDFFDE752E31C6E39363767B39F1E52F6E4095CCC90A1000CFF6D88046153115318F49D53B3331EF7659E76C2A03535286DA98812D56065F16CBF341C2B7960BDAFCC6255C6DE1E4BF72696437F7801A50518BE783146020D086EA864D27080A369949CC560510DD717AD4570138776AF10000")
xor_key = binascii.unhexlify("5A6A74EA9B8EBDE076C4C28334B99A42864169A2C98D3F31DEA5931F711D873D81CBC4316195EF843FC03211206D2627ACBD92899E2C76430AF62262776C836B00000000")#"3B7397BE28A1C5F978B59AB2051D03958DF21305135685E5460321F2A9E6606065A8F68BE82962667C5FEB26A23B607EA9220EA63E6F5F043DF1ECACB21F18690000000000000000")
def add_comment(address, text):
try:
idc.set_cmt(address, text,0)
set_hexrays_comment(address, text)
except:
print("Can't set comments")
return
def gather_offsets(xref_address):
new_address = xref_address
func_start = idc.get_func_attr(xref_address, FUNCATTR_START)
while True:
prev_address = idc.prev_head(new_address)
print(hex(func_start))
if prev_address <= func_start:
break
print(idc.print_insn_mnem(prev_address))
print(idc.print_operand(prev_address, 0))
if idc.print_insn_mnem(prev_address) == "mov":
if idc.print_operand(prev_address, 0) == idc.o_reg:
offset = get_operand_value(prev_address, 1)
return offset
new_address = prev_address
print("Failed to locate offset")
return None
def locate_xrefs(function_address):
xref_list = []
for xref in idautils.XrefsTo(function_address):
if xref.frm not in xref_list:
xref_list.append(xref.frm)
return xref_list
def string_decrypt(offset):
offset_string_end = offset
counter = 0
decrypted_string = ""
if offset < 0x373A:
while data[offset_string_end] != xor_key[offset_string_end & 0x3F]:
offset_string_end += 1
size = offset_string_end - offset
print(size)
while counter <= size:
decrypted_byte = data[offset + counter] ^ xor_key[offset + counter & 0x3F]
decrypted_string += chr(decrypted_byte)
counter += 1
print(decrypted_string)
return decrypted_string
def main(func_addr):
xref_list = locate_xrefs(func_addr)
for xref in xref_list:
offset = gather_offsets(xref)
if offset == None:
continue
decrypted_string = string_decrypt(offset)
add_comment(xref, decrypted_string)