Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 03/13/2023 in all areas

  1. Testing this out I also had the output saving as a 'T', the issue was I don't think that $FO_UTF8 is the right flag. This code allowed the character to save: #include <Constants.au3> Global $sSpecialChar = 'Θ' ; Θ Global $sPath = @ScriptDir & '\Save.ini' ConsoleWrite('SpecialChar: ' & $sSpecialChar & @CRLF) ConsoleWrite('Path: ' & $sPath & @CRLF) Global $hFile = FileOpen($sPath, BitOR($FO_UNICODE, $FO_CREATEPATH, $FO_OVERWRITE)) If $hFile = -1 Then ConsoleWrite('FileOpen error' & @CRLF) Exit EndIf FileClose($hFile) IniWrite($sPath, "Example", "Test1", $sSpecialChar) Something to note is that using ConsoleWrite to display the character did not display it correctly in SciTE, and you also need to make sure that when the file is saved that the character is saved correctly in the source file. And, depending on what you're using these characters for, keep in mind that there are some specific separator characters: https://www.compart.com/en/unicode/search?q=separat#characters So you could use the invisible separator which should never be typed.
    2 points
  2. Just search the provided SciTE Helpfile (Full SciTE4AutoIt3)/documentation:
    2 points
  3. This Beta version contains SciTE v 5.4.0 and a major change to the AutoComplete functionality and automatically addition of required #include lines at the top. Many LUA functions are updated. 2023-12-27 13:30 Merged SciTE Release 5.4.0 with the SciTE4AutoIt3 sources Many changes to the new LUA functions 2023-03-10 13:00 Merged SciTE Release 5.3.4 with the SciTE4AutoIt3 sources Added option to jump to the definition of a Variable when Ctrl+J is used with the caret placed with a variable name. Many other small changes... see this thread for details Move the zip into the Beta directory making it for more people available. Move this thread to AutoIt Technical discussions, so others can participate in testing when they want. 2023-03-14 20:00 Merged SciTE Release 5.3.5 with the SciTE4AutoIt3 sources Also show constant includes in #include<... dropdown. Fixed issue with portable directory duplicates due to improper case checking Fixed REGEX getting all possible *.au3 files when Dir returns a Timestamp in format hh:mm AM/PM How to test/install: Backup your current SciTE directory! Download the Beta SciTE4AutoIt3.exe installer or portable zip. Run installer or do your thing with the portable zip. Check below documentation on all possible configuration option via #Directive or in the SciTEUser.properties. Jos ============ Quick feature overview... check this Documentation for all details ======================================== This is how it looks with a basic example: Here I am using @Melba23's ExMsgBox include file which is located in my Private Include directory: This shown you in more details the basics of the changes: The announced change here has grown into a project on it own, which I feel is now at a stage where I could use some help from beta testers trying out these updated. I have created the initial documentation on all updates made and how the added functionality works, which is now part of the Helpfile available: AutoComplete & Dynamic Includes Previous Top Next Overview This LUA script functionality build in the SciTE4AutoIt3 version of SciTE will dynamically add #include statements required for the used UDFs or Global Const Variables. When dynamic.includes=1 you will be able to use Ctrl+Shift+z to process the whole file and scan it for missing Global Const Variables or UDFs. When dynamic.includes.whiletyping=1 is also set, the LUA functionality will add the required #include lines while typing. This only works when dynamic.includes=1. The AutoComplete functionality has also been changed and will now also search for partial matches in the names in stead of "Starting with", so you don't need to know the exact start of the funtion to be able to search for it. Changes to existing features Syntax Coloring All found Func's as defined here, not just the standard ones, will now immediately have their correct Font & formatting as defined for properties Styles 15-17. After you specified a none-standard known UDF, you will see it has Style 17 Color&Formatting when it is an UDF that exists in an Include file specifically for this Script. Selection for #include lines You can now use either < ' " as starting character to trigger the DropdownList with available include files. This list will now include all Standard, User defined and Dynamically found Include files. You can now type any part of the include name, not just the starting letters, to find the Include file you want. For example when you type: #include<apic this will be shown and we just press 2 times the Down key: .. then when you hit the Tab key, this will be the result: Smart AutoComplete function for Variables, Functions and Abbreviations The Dropdown will show al list of possible Variables or Functions and Abbreviation when you start typing. The match is done on the whole functionname now, not just the starting characters. The Starting $ or _ characters are ignored in this search and the results are shown in the order of the starting position in the found "words" of the typed characters: Example 1: When we type Find the below is returned: As you can see they are sorted in the order of starting position of "Find" and then Alphabetically Example 2: When you type $Yes, the result will be: New: How Dynamic #Include line insertion works Example1 When you type the following in your source: _ArrayAdd .. and then when you hit the Opening bracket or space key, the required #include<array.au3> line will be added within the existing or newly created #region: The same will happen when you use one of the Global Const variables from one of the *constants*.au3 includes in the defined include directories. This #region can be moved to any place in the script you prefer and will be used from here on as long as you do not change anything in those 2 #region lines. Any Subsequent added include file will be added to the end of the list with the Date&Time of the addition so you can easily see when/what was added. Example2 This is an Example for an new script in the SciTE_Jump Directory showing the use of the #SciTE4AutoIt3_Dynamic_Include_Path=; directive: The includes for this Utility are located in the Includes subdirectory, so aren't considered unless we specify it as follows: #SciTE4AutoIt3_Dynamic_Include_Path=;Includes; ... and then we start typing the name of one of the UDFs in a include in this directory and hit Tab on the first one shown: When we then hit the Opening bracket or Space key, the required #include"includes\_SciTE.au3" line will be added within the existing or newly created #region: Example3 This is an Example for a Global Const include file addition: We have just typed the last line of this script: .. and hit the Space key, the required #include<MsgBoxConstants.au3> line will be added within the existing #Region above the #EndRegion line: These are all the Func's (UDFs) that will be recognized by the dynamic include process: All Funcs in the default autoit/includes directory with format _ABC(), undocumented Funcs will be added to AutoComplete All Funcs except __*.au3 from all extra *.au3 Files in the openfile= paths that have a #include-once in it, are added to Style 16 (UserUDFs). All Funcs from the current script file are added to style 17 (InFIleUDFs) All Gobal Const Variables defined in any of the previous defined paths that are defined in a *constants*.au3 scriptfile which also includes #include-once. All Funcs except __*.au3 from all *.au3 Files in the current script directory are added to Style 16 (UserUDFs). All Funcs except __*.au3 from all *.au3 Files in the directories defined with Directive:#SciTE4AutoIt3_Dynamic_Include_Path=;Includes\relative\path;d;\includes\absolute\path Items 1-4 are read from those directories one time during the life of SciTE, but only when the first *.au3 files is opened. (slows it down ~0.5 sec one time to build all required tables) Items 5-6 are read each time an *au3 file is Opened or Switched to its Tab. (slows it down ~0.1 - 0.2 secs per change of tab and at Save time, to build all required current file tables) Configuration options for AutoComplete & Dynamic Includes This is the section in au3.properties where the autocomplete & dynamic includes config is defined. You can copy any of these lines into your SciTEUser.properties: ## ------------------------------------------------------------------------------------------------------------------------ ## dynamic.include Directives and properties reference ## ----------------------------------------------------- #SciTE4AutoIt3_Dynamic_Include=y ;dynamic.include=y/n #SciTE4AutoIt3_Dynamic_Include_whiletyping=y ;dynamic.include.whiletyping=y/n #SciTE4AutoIt3_Dynamic_Include_recursive_check=n ;dynamic.include.recursive.check=n/y #SciTE4AutoIt3_Dynamic_Include_use_local_cache=n ;dynamic.include.use.local.cache=n/y #SciTE4AutoIt3_Dynamic_Include_version=prod ;dynamic.include.version=prod/beta #SciTE4AutoIt3_Dynamic_Include_verboselevel=0 ;dynamic.include.verbose.level=0/1/2 #SciTE4AutoIt3_Dynamic_Include_Path= #SciTE4AutoIt3_AutoItDynamicIncludes_debug=n ;debug.autoitdynamicincludes=n/y #SciTE4AutoIt3_AutoItAutocomplete_debug=n ;debug.autoitautocomplet=n/y #SciTE4AutoIt3_AutoItGotoDefinition_debug=n ;debug.autoitgotodefinition=n/y #SciTE4AutoIt3_AutoItTools_debug=n ;debug.autoIttools=n/y ## ================================================ ## dynamic.include config ## ================================================ #> dynamic.include=y/n n=disabled y=will automatically build the func tables for coloring and autocomplete (requires restart SciTE!) dynamic.include=y #> whiletyping=y/n n=disabled y=will automatically add any required standard or USERincludefile for the current line, on the fly, when ) or enter ispressed !) dynamic.include.whiletyping=y #> use.local.cache=n/y n=disable y=Use cache file for local Include UDFs and VARs which could increase the speed when you have a lot of local includefiles which normally shouldn't be the case dynamic.include.use.local.cache=n #> version prod=Use AutoIt3 Production version beta=Use AutoIt3 Beta version dynamic.include.version=prod #> recursive.check=n/y n=disable y=When you like to only add an Include when it isn't included through another #included file yet. dynamic.include.recursive.check=n # level of debug messages 0/1/2 0=disabled; 1= Warnings & Timing per Function; 2=1+Total timing dynamic.include.verbose.level=0 #> Max number of includes files to read from the user directories in the list. This doesn't including the standard AutoIt3 includes. dynamic.max.includes=150 #> Max number total UDFs in the Userlist to handle by dynamic includes. This doesn't including the standard AutoIt3 includes-UDFs. dynamic.max.funcs=3000 #> Scriptlines longer that this value won't be looked at for Checking for required #Include statements. dynamic.max.line.length=300 ## ================================================ ## Autocomplete and call tip settings ## ================================================ autocomplete.au3.disable=0 autocomplete.au3.ignorecase=1 # Define minimum length before AutoComplete dropdown is shown- default=2 autocomplete.au3.min.length=2 # Include Abbrevs in AutoComplete dropdown (default=1/y) autocomplete.au3.include_abbrevs=1 # Don't show AutoItComplete with these styles (Internal only in SciTE4AutoIt3) autocomplete.ignore.styles.$(au3)=1;2;3;6;7;10;13 # Define which character will be added after Tab or Enter was entered and not on a Function/UDF: Can be \s \t \n for space;tab;newline autocomplete.au3.on.enter=\n autocomplete.au3.on.tab= # List of all AutoComplete API files used api.$(au3)=$(SciteDefaultHome)\api\au3.api;$(SciteDefaultHome)\api\au3.autoit3wrapper.api;$(SciteUserHome)\au3.std.dynamic.calltips.api;$(SciteUserHome)\au3.file.dynamic.calltips.api;$(SciteUserHome)\au3.usr.dynamic.calltips.api;$(SciteUserHome)\au3.user.calltips.api ## ================================================ ## Separate settings for debugging these Lua files ## ================================================ #> Enable debugging for these lua scripts: debug.autoitdynamicincludes=n debug.autoitautocomplete=n debug.autoitgotodefinition=n debug.autoitindentfix=n debug.autoittools=n #> when debug.tofile is defined, log records will be send to the log in stead of OutputPane: debug.tofile=$(SciteUserHome)\SciTE_LUA_Scripts_Debug.err # ------------------------------------------------------------------------------------------------------------------------
    1 point
  4. For the record, @jchd indicate in several posts a way to display correctly Unicode characters in Scite Console. For instance, the character discussed in the precedent posts (Unicode 920, hex 0x398) can be displayed like this in Scite Console : ; ConsoleWrite(ChrW(0x398) & @crlf) ConsoleWrite(BinaryToString(StringToBinary(ChrW(0x398), 4), 1) & @crlf) Why it works is still mystery to me because : * StringToBinary() uses a 2nd param. = 4 ("string data is UTF8") * BinaryToString() uses a 2nd param. = 1 ("binary data is ANSI") Also what confuses me is that we read in the help file, topic "Unicode Support" : Current Limitations : Console operations are converted to ANSI.  So how a Unicode character can been displayed in Scite Console which accepts only ANSI characters (code 0-255) and this character got a code > 255 ? I really wish jchd could teach me this in his own words Also, I noted that Scite menu had an influence on the script as it appears in Scite : When I pasted mistersquirrle's code in Scite, I had to go to File => Encoding => change "Code Page Property" to "UTF-8" Only then the ChrW(0x398) appeared correctly in this line of code : Global $sSpecialChar = 'Θ' ; ChrW(0x398) shows T in Console
    1 point
  5. @baconaise I recently started using the following syntax for a .ini file Local $sIniFile = @ScriptDir & "\" & StringTrimRight(@ScriptName, 4) & ".ini" ... IniWrite($sIniFile, "Main", "Pattern", StringToBinary(GUICtrlRead($ebRegExp), 4)) ; 4 = $SB_UTF8 (string data is UTF8) ... GUICtrlSetData($ebRegExp, BinaryToString(IniRead($sIniFile, "Main", "Pattern", ""), 4)) ; 4 = $SB_UTF8 (binary data is UTF8) Hope it helps
    1 point
  6. you should press enter to open the new window where you can see more details depending on the parameter (value) <image>
    1 point
  7. This simple script installs all Visual C Redistributables (2005, 2008, 2010, 2012, 2013, 2015+ both 32 and 64 bit) on Windows 10/11 x64 via winget utility. Flag "--force" helps avoid a bug when version checker of winget doesn't see difference between 32 and 64 bit versions of packages. Warning: some special editions of Windows (like Windows 10 Enterprise LTSC) are distributed without winget. #include <String.au3> $STR = "2005.x86,2005.x64,2008.x86,2008.x64,2010.x86,2010.x64,2012.x86,2012.x64,2013.x86,2013.x64,2015+.x86,2015+.x64" $aVersion = _StringExplode($STR, ",") For $i = 0 To UBound($aVersion) - 1 Sleep(250) RunWait("winget install Microsoft.VCRedist." & $aVersion[$i] & " --force") Next
    1 point
  8. Looks like your: ControlClick("Partial String 11","&Yes","Button1") is missing the first argument. Should be title/hWnd/class of the window then the text. After "Partial String 11", the next arg should be the ControlID versus the text of the button. Then there's the optional arg of which button on the mouse is clicking ("left", "right", "middle", "main", "menu", "primary", "secondary". Default is the left button.) So it should look more like this: ControlClick ( "title", "text", controlID ) Assuming you'll be left clicking. I'd try something more like this (not tested since I don't know the actual strings you're searching for nor the button classes/instances of the controls):     While 1         Sleep ( 200 ) $aWindows = WinList ( "[REGEXPTITLE:(?i)(.*Program.*)]" )         _ArrayAdd ( $aWindows , 0 )         $iIndex = _ArraySearch ( $aWindows , "Test Program" , Default , Default , 0 , 1 )         if @error then ContinueLoop         $hWnd =  WinGetHandle ( $aWindows[$index][1] )         if not @error Then             MsgBox ( 0 , $index , $hWnd )             ExitLoop         EndIf     WEnd     if $hWnd <> Null Then          if WinExists ( $hWnd , "Partial String 11" ) then             ControlClick($hWnd , "Partial String 11" , "[CLASS:Button; INSTANCE:1]")         EndIf         if WinExists ( $hWnd , "Partial String 22" ) then             ControlClick($hWnd , "Partial String 22" , "[CLASS:Button; INSTANCE:1]")         EndIf     EndIf
    1 point
  9. Recently someone ask about saving images into a text file. I found it interesting enough to spend some times on it. And felt it may be worth publishing it as an example script. This provide an alternative way to save/retrieve image from the well-known Base64 encoding. With this example you can save/retrieve image into/from file, but also into/from the inside of a script. I provided a simple tool to copy/paste the AutoIt code of an image into a script. Let me know if you want to add / change functionalities from it. #include <Constants.au3> #include <GDIPlus.au3> #include <ScreenCapture.au3> #include <File.au3> Opt("MustDeclareVars", 1) Const $SIZE = 600 Global $tImage ; This buffer must be declare for each image that you create _GDIPlus_Startup() Local $hBitMap = _ScreenCapture_Capture("", 50, 50, 50 + $SIZE - 1, 50 + $SIZE - 1, False) _WriteImageToText("Test.txt", $hBitMap, $SIZE, $SIZE, False) Local $hImage = _ReadImageFromText($tImage, "Test.txt", $SIZE, $SIZE, True) _GDIPlus_ImageSaveToFile($hImage, "Test.jpg") _GDIPlus_ImageDispose($hImage) $tImage = 0 ; recommended when GDI+ handle is not required anymore and you want to reuse the same buffer $hImage = _GDIPlus_ImageLoadFromFile("Capture.jpg") Local $aDim = _GDIPlus_ImageGetDimension($hImage) ConsoleWrite("Note this information to use into _ConvertStringToImage : Width = " & $aDim[0] & " / Height = " & $aDim[1] & @CRLF) Local $sImage = _WriteImageToText("", $hImage, $aDim[0], $aDim[1]) _ConvertStringtoAutoIt($sImage) ; At this stage you will have to paste clip board in a "_ConvertStringToImage" like function (this has been done for you in this example) ; Exit $hImage = _ConvertStringToImage($tImage, $aDim[0], $aDim[1]) _GDIPlus_ImageSaveToFile($hImage, "Test2.jpg") _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() Func _WriteImageToText($sFilename, $hBitMap, $iWidth, $iHeight, $bGDIp = True) ; Create text file to save image Local $hImage If Not $bGDIp Then $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitMap) _WinAPI_DeleteObject($hBitMap) Else $hImage = $hBitMap EndIf Local $tBitmapData = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iWidth, $iHeight, $GDIP_ILMREAD, $GDIP_PXF32ARGB) Local $iScan = DllStructGetData($tBitmapData, "Scan0") Local $tByte = DllStructCreate("byte string [" & $iWidth * $iHeight * 4 & "]", $iScan) Local $sString = Hex($tByte.string) If $sFilename <> "" Then Local $hFile = FileOpen($sFilename, $FO_OVERWRITE) FileWrite($hFile, $sString) FileClose($hFile) EndIf _GDIPlus_BitmapUnlockBits($hImage, $tBitmapData) _GDIPlus_ImageDispose($hImage) If $sFilename = "" Then Return $sString EndFunc ;==>_WriteImageToText Func _ReadImageFromText(ByRef $tByte, $sString, $iWidth, $iHeight, $bFileName = False) ; Recreate image from text file If $bFileName Then $sString = FileRead($sString) Local $dData = Binary("0x" & $sString) $tByte = DllStructCreate("byte string[" & $iWidth * $iHeight * 4 & "]") DllStructSetData($tByte, 1, $dData) Return _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $GDIP_PXF32ARGB, $iWidth * 4, DllStructGetPtr($tByte, "string")) EndFunc ;==>_ReadImageFromText Func _ConvertStringtoAutoIt($sImage) ; Format the string image into AutoIt script Const variable Local Const $LINE_SIZE = 4000 Local Const $FILE_NAME = _TempFile(@TempDir, "~~", ".txt", 10) Local $iPos = 0, $sTxt Local $hFile = FileOpen($FILE_NAME, $FO_OVERWRITE) While True $sTxt = StringMid($sImage, $iPos + 1, $LINE_SIZE) FileWrite($hFile, '"' & $sTxt & '"') $iPos += $LINE_SIZE If $iPos >= StringLen($sImage) Then ExitLoop FileWriteLine($hFile, " & _") WEnd FileSetPos($hFile, 0, $FILE_BEGIN) $sTxt = FileRead($hFile) FileClose($hFile) FileDelete($FILE_NAME) ClipPut($sTxt) EndFunc ;==>_ConvertStringtoAutoIt Func _ConvertStringToImage(ByRef $tBuffer, $iWidth, $iHeight) ; Convert the below Const variable into a GDI+ handle Local Const $IMAGE = "6F461FFF6F461FFF6D4620FF6B4620FF6B4523FF6A4523FF684523FF684523FF694422FF684420FF6E4721FF754D23FF774D23FF73491CFF744519FF784818FF7A4A16FF764612FF774815FF774D1EFF774E27FF6B4925FF634326FF5E4329FF543C28FF5A4635FF594637FF554437FF534337FF4F3F33FF504138FF614E46FF583E37FF5D4039FF5B3E35FF583B32FF5C4035FF624739FF654839FF624431FF5E4027FF634425FF674422FF69461BFF6E471AFF744D19FF764C17FF734914FF724716FF75481CFF74491EFF734620FF6F431EFF6D401FFF6C4021FF6D4124FF6D4227FF6D4326FF6D4326FF6D4423FF6D4423FF6D4620FF6D4620FF6F461FFF6D461FFF6D4620FF6B4620FF6B4522FF6A4622FF6A4523FF6A4622FF76512FFF6D4724FF66411BFF69421BFF6A4218FF693F15FF6E4318FF784B1FFF764A1BFF75491AFF71471CFF6B441DFF63401EFF5D3E1FFF5D4228FF5F4733FF8C7867FFA39285FFC1B1A5FFDDCEC5FFF9EAE1FFFFF6EEFFFFFAF2FFFFFFF8FFFFF1EBFFFFF5EFFFFFF1EBFFF8E1D9FFD9C2BAFFB39A90FF876F63FF6A5141FF5F4430FF62442BFF664728FF6B4826FF69451DFF654014FF6D4717FF7A5222FF744B1EFF764C21FF6F451BFF683C17FF6E411FFF784D2CFF774B2CFF6C4023FF6F4326FF6D4326FF6D4424FF6D4423FF6D4522FF6D4522FF6D4620FF6D4620FF6D4620FF6D4620FF6B4620FF6B4620FF6B4620FF6B4522FF6B4620FF623C19FF6A451FFF704A27FF6E4923FF6D4620FF6D4620FF6D4620FF6C451FFF5F3A18FF684726FF694A2BFF5E4126FF674D35FF98806CFFD9C5B4FFFFF2E5FFFFF6EDFFFFFEF6FFFFF8F2FFFCF1EDFFFFF5F1FFFFF6F4FFFDF1EFFFFCF0EEFFFEF1EFFFFFF3F1FFFFF5F3FFFFF5F2FFFFF8F5FFFFFDF7FFFFFCF5FFFFFAF1FFE5D2C5FFB29B8BFF7B624EFF654931FF64462BFF644224FF664322FF6C4725FF643F19FF6B441EFF744C29FF79512EFF724928FF693E1DFF6A3F1EFF744627FF714324FF6F4324FF6F4423FF6F4423FF6D4522FF6D4522FF6B4522FF6D4522FF6B4620FF6B4620FF6B4620FF6B4620FF6D461FFF6D4620FF6D4620FF69441EFF6F4A24FF6C4623FF633E1CFF66411FFF6F4C2BFF6E4B2AFF5F3F22FF694E39FF4E3826FF655140FFB6A394FFFBEADDFFFFFAF1FFFFF6F0FFFFFBF7FFF7EEEBFFFFF8F8FFFDF5F5FFF6EEEEFFFEF6F6FFFFFCFCFFFFF8F8FFFEF6F6FFFFFAF9FFFCF7F6FFF7F2F1FFF3EEEDFFF2EDECFFF7EFEFFFFBF1F1FFFEF2F0FFFFF6F2FFFFF7F1FFFDEAE2FFD4BEB2FF947A6CFF614435FF563827FF654430FF705033FF674625FF613D1FFF653F1FFF6A4323FF6D4423FF6F4423FF734624FF714422FF714422FF714422FF6F4522FF6D4522FF6D4522FF6B4522FF6B4523FF6B4522FF6B4620FF6B4620FF6D461FFF6F471DFF6F461FFF6F461FFF744D27FF694320FF66411FFF674625FF67472AFF5D4025FF593E24FF563E2CFF52423BFFC0B4B2FFFFFFFCFFFFFCF9FFE9E1E1FFF5EFF0FFFFF8FBFFEFEAECFFF5EFF4FFFFFAFCFFFCF7F9FFF4EFF1FFF8F1F4FFF8F2F3FFF5EDEEFFF3EDEEFFF7F5F5FFF6F6F6FFF9F9F9FFFBFAFCFFFBFAFCFFF8F7F9FFF8F5F7FFF9F4F6FFFBF4F9FFFFF5F8FFFFF6F8FFFFF4F5FFFCE8E7FFD4BFBEFF917979FF5B413BFF523827FF60442CFF65472EFF624127FF674325FF704929FF734926FF6D411CFF724520FF724520FF724520FF714520FF6F4522FF6B4522FF6A4523FF6A4523FF6A4622FF6B4522FF6D461FFF6F461FFF6F471DFF71471DFF6F461FFF68411BFF623C19FF684726FF6F5134FF593F27FF48301CFF6B5543FF9E8E82FFF7EFF0FFEFEBF1FFEAE8EEFFECEAF0FFF6F4FAFFFFFDFFFFFFFDFFFFFAF6FCFFF8F4F9FFFFF9FEFFFAF5F7FFF8F2F3FFFFF7F7FFFFF7F7FFFFF7F5FFFFFFFCFFFBF8F4FFF6F5F1FFF5F3F2FFF3F4F2FFF2F2F2FFF2F1F3FFF8F4F9FFFEFAFFFFF7F0F7FFF8F0F7FFF7ECF4FFFAEDF5FFFFF8FFFFFFF7FFFFE9D8E1FFC7B4B7FF715C54FF5D4636FF563C2BFF664A32FF6D4C32FF664022FF673D1AFF724621FF72451FFF74451FFF72451FFF71461FFF6F4520FF6B4523FF6A4424FF684523FF6A4622FF6B4522FF6D461FFF6F461FFF71471DFF71471DFF6F461FFF6E4721FF6C4725FF644427FF553B23FF533D2BFF786556FFC4B3AAFFFFF6F2FFF6F2F8FFF5F5FFFFF9F8FFFFF6F5FFFFF6F3FCFFF5F3F9FFF3EFF5FFF1EBF0FFFBF4F7FFFAF2F2FFF9EDEBFFFFF4F0FFFFFCF6FFFFF4EDFFFEEDE4FFFFF3EAFFFFF9EFFFFFF7EDFFFFF7EEFFFFF7F0FFFBF5F0FFF8F1EEFFFAF2F2FFFDF6F9FFF7F0F5FFFDF5FCFFFFF7FEFFFBF2FCFFFBF1FDFFFFF7FFFFFFF8FFFFFFF6FEFFEEE1DFFF9D8B84FF523F32FF4A3220FF61422BFF6B462AFF6E4524FF754A23FF72461DFF74461DFF72461DFF71461FFF6D4620FF6A4523FF684524FF684523FF6A4622FF6B4522FF6D4620FF6F461FFF6F461FFF6F461FFF6D4620FF643E1BFF6C4A2CFF62442BFF5A422EFF8E7B6EFFE4D5CCFFFFFEFAFFFAF2F3FFFAF6FCFFF3F2FCFFF4F1FAFFF7F3F9FFF9F3F8FFF9F2F5FFFCF4F5FFFFF7F5FFFCF0ECFFDDCDC6FFB3A098FF9C897CFF988172FF8E7664FF8D7563FF9C8472FF8E7866FF8B7563FF8D7968FF9B8978FFAF9E91FFCABAAEFFEADAD3FFFFF3F0FFFFF4F2FFFDF2F4FFFCF3F6FFFBF4F9FFF9F1F8FFF4ECF6FFF3EDF8FFF9F1FBFFFFFBFEFFF8ECEAFFBBABA4FF6B5549FF4C311DFF644329FF734D2DFF693F1AFF71471DFF72471CFF72461DFF" & _ "71461FFF6D4620FF6A4523FF684524FF6B4624FF623E1AFF754F2CFF623D17FF744D27FF714A24FF67401AFF694320FF634221FF694B30FF5D422DFF927E6DFFFFFCF3FFFFF5F1FFFFF9F9FFFFF7F8FFF2EBEEFFFEF7FAFFFFF8F9FFFBF1F1FFFFF8F4FFFFF6F0FFDCCBC2FFA69386FF947D6DFF977E6AFF9B7E69FF9D7F66FF9E8065FFA08063FFA28063FFA48062FFA68062FFA68062FFA47F63FFA27F65FF9E7E67FF9B7E69FF997D6CFF947D6DFFC2AFA2FFEFE0D7FFFFFAF4FFFBF0ECFFF7EFEFFFFFFBFCFFFEF9FBFFEEEBEDFFF8F1F6FFFDF5F6FFFFFBF7FFDBCAC1FF705949FF52361EFF613F21FF734D2AFF704720FF73491FFF6C4218FF6B421BFF734C26FF6F4A28FF654221FF6E4825FF643E1BFF6E4825FF6D4822FF694320FF66401DFF6E4927FF684628FF66482DFF563C24FF97816FFFFFFDF2FFFFF7F1FFF9EDEBFFF9F1F2FFFFF9FAFFFFFBF7FFFFF1EBFFFFF0E9FFFCE9E1FFD5C2B5FFA38C7CFF947B67FFA78B73FF9E8065FFA28063FFA68060FFA7815FFFA9815EFFAB815CFFAB825BFFAE815BFFB2815BFFB2815BFFB0805CFFAE805EFFAD805FFFA78060FFA47F63FF9E8065FFA0866EFF97826DFFC1AF9EFFF9ECDEFFFFF8EEFFF6EFE6FFFAF4EDFFFFFBF8FFFDF8FAFFF4EDF2FFFFF9F9FFF8EAE4FFE1CEC1FF765D49FF5A3D22FF674625FF623E1AFF734C25FF734C25FF6A431CFF65401AFF67411EFF694422FF704923FF69441EFF6A4421FF724E2AFF623D1BFF654423FF6B4B2EFF5A3C23FF5C412CFF9C8674FFFFFFF4FFFFF5ECFFFFF4F0FFFFFCFCFFFCF4F5FFFDF1EFFFFFF2E7FFFFFCECFFF3D9C8FFB09581FF8F725DFF9E7F66FFA58366FF956F4FFFA7815EFFAB815CFFAE815BFFB08259FFB08358FFB28357FFB28357FFB58257FFB98257FFBB8157FFBB8157FFB78158FFB58159FFB2815BFFAE815CFFA9815EFF9B7857FFA48669FF937A60FF95806AFFD0C2ACFFFFF6E2FFFFFBE9FFFFF6ECFFFDF7F8FFF2EBF0FFFFF6F8FFFFFFFBFFFFEFE3FFEBD7C6FF6D553DFF573B1DFF6B4C2BFF64421EFF633F1BFF6C4721FF6E4825FF66401DFF66401EFF70481EFF714A23FF6C4721FF6D4826FF603F1EFF6D4F32FF563C24FF553D29FF917C6DFFFFFFF5FFF6E7DEFFFFFAF4FFFFF7F3FFF4EBE8FFFFF8F9FFFFFDF9FFFFF1E1FFCDAE97FF9C7D64FFA28167FFAB866AFF9F7959FFA47C59FFBD926BFFAE8259FFB08358FFB28357FFB48357FFB48355FFB48355FFB58355FFB78355FFBB8255FFBD8255FFBB8255FFBB8255FFB98257FFB58257FFB28258FFAE8259FFB99069FFA37F5BFFA38463FF9D8162FF887256FFAD9A7FFFEFDEC4FFFFF8E8FFFFF6F3FFFFFAFDFFF6EBEDFFFBF0ECFFFFFBF2FFFFF2E5FFE4D0BEFF5C462DFF654A2FFF5D4021FF5F3E1DFF694624FF6E4825FF6D4724FF6E4623FF71471CFF6E461CFF6F4822FF684523FF634326FF61472FFF483220FF887566FFFAE9E0FFFFFAF4FFF8ECE8FFFFFBF7FFF8EFECFFFFFFFCFFF3EAE7FFF4E4DDFFB19682FFAF8C72FFA27D61FF9D7757FFA77E5DFFB28863FFB1865FFFAA7C53FFB28258FFB28357FFB48357FFB48357FFB48357FFB28357FFB48357FFB48357FFB58257FFB58257FFB58257FFB58257FFB58257FFB48357FFB28357FFB08358FFA67A51FFAD845DFFA8835DFFAB8866FFA8896AFF8F7154FFA4876CFFE4CCB8FFFFF2EFFFF7ECEEFFFFFBFBFFFBF0ECFFFDF1EBFFFFFFF6FFFFF3E6FFBAA996FF57402AFF60472DFF6C4E31FF664524FF5F3A18FF6E4623FF784E29FF76491DFF6A4015FF6B441EFF6C4928FF62452AFF513925FF675445FFD9CAC1FFFFF6F2FFFFF4F2FFFFF8F8FFF6EDEAFFFFFDFAFFFFF7F3FFF1E6E2FFA18F84FF967760FFA27C5EFFA98262FFB08766FFAD8360FFA77C55FFA97D54FFB2855AFFB28258FFB28258FFB28258FFB28258FFB08358FFB08259FFB08259FFAE8259FFAD825BFFAD8359FFAD8359FFAE8358FFB08358FFB08358FFB08358FFB08358FFAF8459FFA3794FFFAB8059FFAA825FFFA27C5AFFB18B6BFFB49072FF8F725DFFC1AFA8FFFFFEFEFFEFE3E1FFFFFEFCFFFEF3EFFFF6EBE3FFFFFFF5FFFBEEE0FF8D7C69FF5E4933FF553A20FF6B4C2DFF6D4826FF663F19FF70451EFF754718FF70451AFF67401AFF6C4928FF5F442AFF5D4735FFB7A69DFFFFF6F2FFFCF2F2FFF3EBECFFFAF2F3FFFFFDFDFFFAF1EEFFE8DDD9FF92857DFF948174FFA2836AFFA57F61FFA67F5FFFAD8463FFAE8461FFAB8059FFAE8259FFB98B62FFB08259FFB08259FFAE815BFFAE815BFFAD815CFFAB815CFFAB815EFFA7815EFFA4815FFFA2825EFFA2835CFFA6825CFFA7835BFFA9825BFFAD8359FFAD8359FFAF835AFFB68A61FFAE815BFFA97B59FFAC7F5EFFA47859FFA3775AFFAB8972FF99847CFFBEB1AFFFFFF8F6FFF2E6E4FFFFFCF8FFFCF2EBFFFCF3EAFFFFFFF2FFE7DACAFF776653FF462E16FF6A4C2FFF775432FF67401AFF6A4016FF714216FF7C5027FF653D1AFF654326FF5A412DFF756457FFFCF0EAFFFAF2F2FFF6EFF2FFFFFDFFFFFFF7F8FFFFFAF8FFFEF1E9FF9B8A7DFF9B8776FF927762FFA17E64FFAA8363FFAC8362FFA77F5CFFAB7F5AFFAE835CFFAE8259FFA87C53FFAE8259FFAE8259FFAD815CFFAB815CFFA9815EFFA7815FFFA68060FFA28160FF9E8162FF9D8260FFA0825FFFA2825EFFA7825CFFA9825BFFAD825BFFAD8359FFAA7E55FFAB7F56FFB1845EFFB38661FFAE805EFFAE8160FFB08263FFA57D64FF997C6DFF8F7B70FFDDCCC3FFFFFAF3FFFBEFEBFFFFFFFBFFF6F0EBFF" & _ "FFF8F4FFFFFFF8FFAA9D8FFF64503EFF5C4127FF5F3E1DFF6D4620FF784D22FF76431BFF774A25FF60381BFF6B4B34FF563F30FFE7D9D3FFFCF4F5FFF1EDF2FFF1EDF2FFFFFDFEFFF9EEEAFFFFFBEFFFB79F8BFF9A7D62FFA48160FFAC8664FFA78060FFA78060FFA9805FFFA9815EFFAD815CFFAD825BFFAE8259FFAE8358FFA97D54FFB1875DFFA87E59FFA77F5CFFAF8A68FFA07D5CFF977557FFAC8D6EFFA68A6CFF937657FFA17E5DFFAF8967FFA87B59FFAA7B55FFB4855FFFAD7F56FFAE8358FFAE8259FFAD825BFFAD815CFFAD805EFFAD805FFFAD7F60FFAB7F62FFAA8466FFA38268FF9F826DFFFBE4D5FFFFF5EEFFFFFDFBFFF9F2F5FFF9F3F8FFF8F1F4FFFFF9F6FF7D6C63FF5C4432FF644427FF6D4822FF66390DFF73411DFF724422FF6B432AFF5D3F2CFF907B73FFF8ECEAFFFBF6F8FFF7F5FBFFF8F7FBFFF0EBEAFFFFFFF8FFC9B5A4FFAA8D72FFA47F5DFFA57B51FFB2865DFFAB815EFFA7815FFFA9815EFFAB815CFFAD825BFFAD8359FFAE8358FFAE8358FFAE845AFFA87F58FFB18A64FFAA8563FF957355FFA18366FFB89B80FFB0957BFFAF967CFFB89D82FFA9876AFF9D7558FFB18463FFB68662FFAF7E58FFB4835BFFB08358FFAE8358FFAD8359FFAB825BFFAB815CFFAD805EFFAD805FFFAE7F5FFFB08361FF9B7251FFB08D73FFB29481FFFFEAE2FFF8EBE9FFFFFAFFFFF5F0F9FFF5F1F7FFFBF4F7FFC2B6B0FF5B4637FF62452AFF69441EFF744A1DFF71411FFF693E1DFF6B452DFF5E4231FFD6C3BBFFFFFAF8FFF6F1F3FFF8F7FBFFFBF8FAFFF3ECE9FFFCEDE4FF957F6DFF9C7E61FFA98360FFAC8057FFB0845BFFAB815EFFA9805FFFAB815EFFAB815CFFAD825BFFAE8259FFB08358FFAE8358FFB3895FFFA47D57FFA27D5BFF9E7C5EFFA88B70FFDFC5ADFFFFF6E2FFFFF6E4FFFFF7E5FFFFFAE5FFE5C9B1FFAE8D73FFA47C5FFFA67B5AFFA77A55FFB4865DFFAE8358FFAE8358FFAD8359FFAD825BFFAD815CFFAD805EFFAD805FFFAD805EFFAE815CFFA87E5BFFA78266FF93745FFFCDB7ABFFFFF4F1FFFDF4F7FFF9F5FBFFF7F3F9FFF8F1F4FFFFF5F1FF857265FF5D4228FF694422FF784E23FF744726FF683E21FF5F3D26FF896F5FFFFFF0E9FFFFFBFBFFF2ECF1FFF6F2F7FFF2EDEEFFFFF9F5FFBAA99CFF967E68FF9C7D5EFFA9825CFFB78C61FFAC7F54FFAD815CFFAB815EFFAB815CFFAD825BFFAE8259FFB08259FFB08358FFAE8259FFA77E57FFA8825FFF9D7B5DFFB3957CFFEED6C2FFFFFAE9FFFFF9ECFFFFFEF2FFFFFBF2FFFFF9ECFFFFFBEAFFF2D7C3FFB6947CFFA07A5CFFA97F5CFFA47952FFAE8259FFAE8358FFAE8259FFAD8359FFAD825BFFAD815CFFAD805EFFAD805EFFAA7D57FFB88C67FF9F7959FF9F8067FFA18878FFFCEAE3FFF9EFEFFFFBF5FAFFFAF3FAFFF8F1F4FFFFF7F5FFD0C0B4FF5B402BFF684726FF6B4319FF764D2DFF6C4529FF583924FFCEB6AAFFFFFBF8FFFEF6F7FFF8F2F7FFFBF6F8FFF7EFEFFFF2E5DDFF897564FFA0856BFFA58261FFA47B54FFB5885DFFAB7E53FFAD825BFFAD815CFFAD825BFFAE8259FFB08259FFB08358FFB08358FFAE8259FFAB845EFFA78463FFAA8D72FFD8C0ACFFFFFDF0FFFFFEF6FFF1E6E2FFF2EBE8FFEFE7E7FFEDE4E0FFFFFDF5FFFFFEF1FFDBC2AEFFAC8E73FFA78161FFA8815BFFAD8359FFAE8358FFAE8358FFAE8259FFAD8359FFAD825BFFAB815CFFAD815CFFAC7F59FFAB8059FFAB8261FF9F7D60FF9A7F6BFFC1ADA2FFFFF6F2FFF9F0F3FFF8F1F8FFFEF8FDFFF2E8E8FFFFF4EDFF705844FF65472AFF643F19FF6D462AFF68442CFF674B3AFFFBE7DCFFFFF4F2FFF6EFF2FFFAF4F9FFFDF6F9FFFFFAF6FFC2B2A5FF8D755FFF9F7F62FFAE8865FFA77D53FFAD8054FFB3865AFFAE8259FFAE815BFFAE8259FFB08259FFB08358FFB08358FFB08259FFAD825BFFAB8563FF9E7E61FFC7AC97FFFBE8D9FFFFF5EDFFFCF4F4FFFFFEFFFFFFFDFFFFFFFDFFFFFFFEFFFFFCF4F4FFFFF7EFFFFEEBDCFFC9B19BFF9E8063FFA98462FFAB825BFFAE8259FFB08358FFB08358FFAE8259FFAD8359FFAB825BFFAD825BFFB0845BFFA67953FFAC825DFFA68060FF9A7B62FF9C8373FFF6E4DDFFFFF8F8FFF7F0F5FFFFFBFFFFF2EBEEFFFFFAF6FFA38F7EFF62452AFF6C4824FF623F25FF62422BFF92786AFFFFF2EBFFFAF2F3FFF6F0F5FFF6F0F5FFFEF6F7FFF8EBE3FF9A8675FF9E8067FFA78463FFAF865FFFAD8257FFB18256FFB6875BFFB08259FFB08259FFB08259FFB08358FFB08358FFB08259FFAD825BFFA9815EFF9A7658FFB79980FFF4DECCFFFFFFF7FFFEF5F2FFF0ECF1FFF0F1FBFFE7E9F4FFEAECF7FFF1F2FCFFEDECF0FFFAF5F2FFFFFFF7FFF3E2CFFFB29B81FF957657FFA7815EFFAD825BFFAE8259FFB08358FFAE8358FFAD8359FFAB8359FFAB8359FFB2845BFFB08259FFA87B55FFB28A67FF9B795CFF9E816CFFC9B5AAFFFFFBF7FFF9F2F5FFF8F4FAFFFBF5FAFFFDF1EFFFE0CFC2FF624830FF694827FF5F4126FF634631FFBCA69AFFFCEDEAFFFFF9FCFFFBF7FDFFF3EDF2FFFFF6F6FFDAC7BFFF8A715DFF9B795CFFB8916BFFA77B52FFB18458FFB8885EFFAA7D52FFB08358FFB08358FFB08358FFB08358FFAE8259FFAD825BFFA9815EFFA68060FFA6886DFFEBD2BEFFFFFBEEFFFFF6F0FFFCF6F7FFF4F3FCFFEDEFFAFFF2F5FFFFF6F9FFFFEEF0FBFFF0F2FAFFF5F5F5FFFCF6EFFFFFFCEEFFE4D1BCFF9C8468FFA48160FFA9815EFFAE815BFFB08259FFAE8358FFAD8358FFAB8458FFAB8458FFAE8358FFAE8156FFB1835AFF" & _ "AA7E59FFAE8866FF9D7E65FFA68F7FFFFFEFE8FFFFF7FAFFECE8EEFFFBF7FDFFFBF3F4FFFFFAF1FF654D39FF5F4021FF64462DFF513923FFF9E7DCFFFCF0EEFFFBF5FAFFF6F3FCFFF1EAF1FFFFF7F7FFA18B7FFFA4856EFFA57F5DFFAA8056FFB38458FFB6875BFFB18459FFAD8055FFAC7F54FFBF8F65FFAC7F54FFAB7F56FFAD825BFFA77F5CFFAE8868FF95745AFFDABFAAFFFFEBDBFFFFFFF7FFFFF4F2FFF0EBEDFFFDFCFFFFE2E4EFFFF7F9FFFFEDEDFBFFF5F5FFFFEFF1F9FFF1F3F4FFFEFDF9FFFBF7ECFFFFFEECFFC8B39DFF987A5FFFB28B6BFFA47755FFB78A64FFA87C53FFAA8055FFB28B5FFFAB8458FFAE8358FFAD8055FFB5885DFFA97D54FFB28661FF9F7B5DFF987D69FFEDDAD2FFFAF2F3FFFCF8FEFFF1EEF7FFF6F1F3FFFFF9F1FF96806EFF5D3F22FF61462CFF644C38FFFFF0E4FFFDF3F3FFF7F3F9FFF4F0FBFFF9F2F9FFFEF1EFFF9F8577FFA48369FFA97F5AFFB08155FFB58458FFB5865AFFB0845BFFAD8158FFB18157FFAC7D51FFB5875EFFAB8059FFAB8261FFA17D5FFF95765DFFC1A692FFFFF1E1FFFFFAEFFFFFF3EDFFF6EDEAFFFDF7F8FFF0ECF1FFFFFDFFFFDFDDE3FFF1E9F3FFF8F1F8FFF9F8FCFFEEF0F0FFE8ECE7FFFFFFF9FFF5EFE2FFFFF5E3FFC1A692FF957159FFAB8164FFA97C5AFFB1845FFFAE845AFFAA8356FFA98255FFAE845AFFAA7E55FFB7875DFFAF8054FFB3855CFFA67D5CFF9D7E67FFDCC9BCFFFFF5F5FFFDF9FFFFF2F1FBFFF7F3F8FFFFF8F2FFAC9887FF5E4126FF5F472BFF826B55FFFFF7EEFFFEF6F6FFF2EFF8FFF3EFFAFFFFFAFFFFF1E0DDFF9B7F6EFFA68062FFAF8158FFB48254FFB58456FFB28559FFAF845DFFAE835CFFB28258FFA97A4EFFB2845BFFAF8562FFAA8668FF96775EFF9E8473FFF4DED2FFFFFFF7FFFFF6F0FFFAEFEBFFFBF2EFFFFFFDFAFFFBF4F1FFF6ECECFFA99D9BFFBEAEAFFFFCEFEDFFF7EFEFFFFCFBF7FFF3F7F2FFF4F8F2FFFAF8F0FFFFFFF7FFEED6CAFFA07F6FFFA47B64FFA67A5DFFB28563FFAF855BFFAA8356FFA58153FFAD845DFFA87B55FFB7875DFFB38254FFB28357FFAD825BFFA18066FFC1AA9BFFFFF3F1FFF9F5FBFFF1F0FAFFF4F2F8FFFDF2EEFFCAB7A8FF5C3F24FF5E462AFF9C8771FFFFFAF1FFFFF7F7FFF2EEF9FFF4F0FBFFFFFCFFFFD8C5C0FF9B7B68FFA87F5EFFB48357FFB88455FFB58355FFB08358FFA9825CFFAA835DFFAF7F55FFB9885CFFA57852FFAC8565FFA38169FF977D6CFFD3BFB4FFFFF8F2FFFFF4F2FFF4EBE8FFFFF6F3FFFFFBF7FFFFF4EEFFFFFFF7FFC3B3A7FF877368FF90756BFFE6CDC3FFFFF1E8FFFFFBF4FFFDFFFBFFE0E6E1FFFFFFFCFFF3ECE9FFFFEFEAFFDBBEB5FF9D7667FFAE826BFFA87C5DFFAA815AFFB0895CFFA68155FFAC855FFFA67A55FFB7875DFFB68557FFB28052FFB0845BFFA68264FFA78F7DFFFFF3F1FFF6F2F8FFEFF0FAFFF4F2F8FFF7EEEBFFEBD8C9FF5B3E23FF604628FFAE9781FFFFF9EFFFFBF6F5FFF0EFF9FFF4F3FDFFFFF5FBFFBFABA6FF9C7C65FFAD805EFFB78557FFBA8553FFB58454FFAE8156FFA57F5CFFA6805DFFAF8257FFB8885EFFA87C57FF9F7A5EFF987A67FFBAA79AFFFFF1EEFFFFF6F8FFFDF6F9FFF8F1F4FFFFF5F5FFFFFDF7FFFFF2E6FFEDD9C8FFA18973FF9B7C65FF9C7761FFB79480FFFEE7D7FFFFF7EAFFF8FBF2FFEEF5F2FFF1F6F7FFF6F3F5FFFFF4F6FFFFEEEDFFC19D93FFAB7F6EFFA3765BFFA97F5AFFAC8559FFAB865AFFA98360FFA57B58FFB3865BFFB78557FFB48051FFB5855BFFA98262FF977C68FFFFF7F3FFF9F5FBFFF3F4FEFFF6F5FEFFFAF1EEFFFFF1E2FF604328FF614729FFB39D84FFFFF5E9FFFAF5F4FFF1F0F9FFF6F5FFFFF8EEF4FFB4A19AFFA07E67FFAF825DFFBB8556FFBC8552FFB58454FFAC8057FFA47F5DFFA47F5DFFB3865BFFAA7A50FFB38966FF99785EFFA58C7CFFEDDDD6FFFFFBFCFFF5F1F7FFF9F6FFFFFEFAFFFFFAF0F0FFFFF9F1FFFFF1E0FFAA9078FF9B7B5EFFAC8666FFAC7D5EFFA97D60FFC7A891FFFFF9E7FFF8F7EDFFEFF6F3FFEEF5F8FFF5F7FFFFFFF4FCFFFFF1F5FFFFDBD7FFB28679FFAA7E66FFA97F5CFFA07B4FFFAD8A5EFFA78260FFA67D5CFFB08259FFB68456FFB58250FFB58458FFAA8160FF927762FFFFF5EFFFF8F4F9FFF2F2FEFFF6F5FEFFFBF2EFFFFFF8E9FF62452AFF624929FFB29C83FFFFF4E8FFFAF5F4FFF0EFF8FFF8F7FFFFF4EBEEFFBDA8A0FFA48068FFB1825CFFB98452FFBB8451FFB58454FFAD8359FFA48062FFA3805FFFB2855AFFAC7C52FFAE8663FFAE8F76FFDAC4B8FFFFFAF6FFF6F0F5FFF2F1FBFFEDEDF9FFF9F6FFFFFBF3F3FFF4E5DCFFDAC2AEFF937558FFA17B58FFAE8259FFB17A53FFB6825EFF99775AFFE8D5C0FFF7F5EAFFE9F0EDFFF4FCFFFFE9EBF6FFFEF2FEFFFFE9F1FFFFF7F7FFE3B8AFFFBB8F78FFA87E5BFFA58054FFAA875BFFA27F5EFFA88161FFAE8057FFB58355FFB98452FFB28153FFA9815EFF997C67FFFFF3EDFFF7F3F8FFEFEFFBFFF4F3FCFFFCF3F0FFFFF4E5FF64482AFF64482AFFB09A81FFFFF4E8FFFAF5F4FFEFEEF8FFF9F8FFFFF3EAEDFFC6B3ABFFA48068FFB0815BFFB78250FFBA844FFFB68555FFAF855BFFA48264FFA58261FFAD8054FFBB8E62FF9B7654FFC6AB96FFFFFBF4FFFFF7FAFFECEBF5FFF4F4FFFFF0EFF9FFFCF7F9FFFFFEF6FFDFCBBAFF9B7E63FFAE8A66FFA98157FFB48559FFC28B60FFB17D58FFA68060FFA9927CFFEBE3D6FFFCFDF9FFF2F6FBFFEFF0FAFFF9EFFBFFFFEDF6FFFFEFF0FFFFF5EDFFC39C86FFA17A5AFFB48E64FF" & _ "A48156FFA37D5DFFAA8363FFAC7E55FFB38153FFB98654FFB07F51FFA8805DFF9E816CFFFFF5EFFFFCF6FBFFF1F2FCFFF7F7FDFFFFF8F5FFFFF3E3FF674D2FFF614328FFAF9781FFFFFFF7FFEDE7E8FFF7F8FFFFF5F5FFFFF9F3F8FFB8A69FFF9F8166FFAF855BFFB78551FFB17D48FFB78855FFB3895EFF9B7857FFA5805EFFB18354FFB38758FFBC9A7CFFFFEFDEFFFFF8F9FFEDEEF8FFECEFFDFFEBEBF7FFF3ECEFFFFFF7EEFFFEE6D0FFAC8D6EFFA37E58FFAF855AFFAC8255FFB18458FFB18157FFAB7E58FFA17B5BFF9F836BFFBDAD9DFFF4EAE3FFFFFEFFFFF0E9F0FFFDF5FCFFFFF7FBFFFEEAE9FFFFF3E9FFFFF0DDFFAF8E74FF9B7654FFAC8663FFA98361FFAA805DFFB08259FFB07F51FFBE8C5EFFAC7C52FFAA8363FF907561FFFFF6F0FFFBF6F8FFF3F2FBFFF2F1F5FFFDF7F2FFFFFCECFF584226FF65472CFFB59A85FFFFF7EEFFF5EFF0FFF5F6FFFFF1F3FEFFF9F3F8FFB7A7A0FFA08269FFA07A50FFB78654FFBA8853FFB38451FFAD8358FFA17E5CFFA98664FFB2885DFFA67F58FFFCE2CAFFFFF5ECFFFBF9FFFFF6F9FFFFE6E9F7FFF7F6FFFFFFF8F4FFFFFFF1FFB89A7FFFAB8763FFA5805AFFAE8760FFA7815EFFA6805DFFA8825FFFA88361FF9E7D63FF907561FF9A877AFFCDBFB9FFF6EEEFFFFDF7FCFFFCF5FCFFF9F2F7FFFFF5F5FFFFFDF6FFFFF0E1FFE9CEB9FF9D7F64FFA37F61FFA67F5FFFAA805DFFBC8E65FFA8774BFFB38256FFB1855CFFA58163FF947B67FFFFF7F1FFFDF6F9FFF6F4FAFFF3F2F4FFFDF7F0FFFEF1E1FF5A4529FF67472AFFAC917CFFFFF0E7FFFDF5F6FFF7F6FFFFF0F1FBFFFBF5FAFFC7B7B0FF9E8369FF9C7850FFB88858FFB98955FFAC7E4EFFB0865BFFA78462FF9C7D5EFF997B5EFFDBC1A9FFFFFFF5FFF9F1F1FFF4F3FCFFF1F3FEFFF4F5FFFFF7F2F4FFFFF8F1FFD6BFAFFF997B62FF917356FFD1B499FFD9BFA7FFC5AD99FFD7BFABFFD3B79FFFD8BCA4FFD7BEAAFFC7B4A7FFBCAEA8FFD1C9C9FFF2ECF1FFFCF9FFFFF4F0FBFFF1EEF7FFFBF4F9FFFFF7F7FFFFF4EDFFFFF7EAFFBFA795FF9A7E66FFA68062FFAA805DFFB1835AFFB08056FFB7875DFFA47952FFA38164FFA88E7DFFFFF6F0FFFBF5F6FFF6F5F9FFF6F3F5FFFFF8F1FFEBDDCBFF5D472BFF634326FF92765EFFFFF5EAFFFFF5F5FFF7F6FFFFEFF0FAFFFBF5FAFFE4D7CFFF987E66FFA5815DFFB5895AFFAD7E4BFFAC7E4FFFB68C62FFA3805EFF907259FFAE9A89FFFFFFF7FFF9F1F1FFF3EFF4FFF1F2FCFFEDECF6FFF3EDF2FFFFF8F6FFE8D5C8FF98806CFF967A62FFAE947CFFFFEADAFFFFF6EAFFF1E8E5FFFFFDF9FFFFF3E8FFFFF3E4FFFFF9EEFFFFFBF3FFFCF2F2FFF8F3F5FFF7F4FDFFF1F0FAFFF0F0FCFFF7F6FFFFF1EFF5FFF0EBEDFFFFFDFAFFFEF2ECFFF4E5DCFFAF9888FF9D7B5EFFB38966FFA37650FFB4865DFFB78B62FF99714EFFAD8C72FFB39C8CFFFFF5EFFFF7F1F2FFF5F1F6FFF7F2F3FFFFFAF1FFD1C1B0FF60482CFF634123FF72563EFFFFFBEEFFFCF0EEFFF9F7FDFFEFEEF7FFF8F3F5FFFFF3EDFF957D67FFA68361FFB0865BFFAD7F50FFB18458FFA98157FF9D7856FFAA8F7AFFEEE2DCFFFDF9FEFFEDEAF3FFF6F5FFFFF8F7FFFFF9F5FBFFF0E4E2FFFFF3EAFFB39B89FF9B8169FF967C64FFF8E2D0FFFFF2EAFFF7F2F4FFF9FAFFFFF2F4FFFFFFFCFDFFFFF3EDFFFEF2F0FFFFF7F7FFFBF6F8FFF8F6FCFFF8F5FEFFEFEEF7FFF4F5FFFFF6F7FFFFF5F4FDFFF2F0F6FFFDF8FAFFF8F2F3FFFFFEFEFFDDCCC3FFA38169FFB18764FFAD805AFFA97C56FFAD815CFFA6815FFFA5876EFFC5B1A0FFFFF6F0FFF6F0F1FFF5F2F4FFF9F4F3FFFFFCF2FFB6A592FF62482AFF664426FF61432AFFFDE8D9FFFDF1EDFFFBF5FAFFF1EFF5FFF5F0F2FFFFFCF6FFA48E7CFF9C7D5EFFA78059FFB78C61FFB3895EFF9D744DFFAB8664FFE7CCB7FFFFFCF9FFEFEEF7FFF2F1FBFFF7F4FDFFF7F3F9FFFAF0F0FFFFFFF8FFC4B09FFF967B66FF9F846AFFD5BBA3FFFFFDECFFFFF4F0FFEEEBF4FFECF3FFFFE4EAFDFFF6F4FAFFF5EDEDFFF6EEEEFFF6F0F1FFF1ECEEFFF4EFF1FFFAF6FBFFFAF6FBFFF8F4F9FFF0ECF1FFFFFBFFFFFFFCFFFFECE7E9FFFFFEFFFFF5F0F2FFFFF2ECFFD7B89FFFA37956FFAF835EFFA87E59FFAB8261FFA98769FF856A55FFEDDDCDFFFFF8F4FFF9F4F3FFFBF6F7FFFCF5F2FFFFF8ECFF98836EFF64482AFF684524FF5F4126FFD0B9A9FFFFF7EFFFF9F2F5FFF7F3F9FFF8F3F5FFFFF6F2FFCAB5A6FF997B62FFA27D5BFFB58E67FFA98059FFAC855EFFDDB896FFFFF6DEFFFDEFE9FFFDF8FAFFFDF7FCFFF6EFF2FFFBEFEDFFF9E9E2FFF7E2D3FF8F7662FF9D7F66FFBFA186FFFFFEE6FFFFF0E0FFFFFBF5FFFAF6FBFFEEF1FFFFF1F6FFFFFBF7FCFFFEF6F6FFFFFBFBFFFFFCF9FFFEF5F2FFFFF6F3FFFFFBF7FFFFF6F2FFFFF5F1FFF6EDEAFFFFF9F6FFFFFCF9FFF1E9E9FFFFFBFCFFEFEAEBFFFFFAF2FFFFEED6FFC49978FFAB815EFFAC8362FFAB8769FF9F8067FF8D7563FFFFFAEEFFFFF6F2FFFBF6F5FFFFFAF9FFFDF3ECFFFCEBDEFF765F49FF624526FF684321FF644526FFA9917DFFFFFCF3FFFBF0F2FFFEF8FDFFFFF8FBFFF7EEEBFFEAD8CDFF9A826CFF9B7C5DFFA98561FF98734DFFC9A47EFFFFEAC6FFFFFDE2FFFFF9EAFFFCECE5FFFFFFF9FFFFF2EBFFFFF7ECFFFFF4E5FF99806CFF9C8068FFA9886EFFFFEBCEFFFFFBE2FFFFFBE7FFFFF0E5FFFFF4F0FFF8F2F7FFF7F3F8FFFFF7F7FFFEF4EDFFFFF4EEFFFFF4ECFFFFF3E7FFFFF9ECFFFFFAEDFFFFEFE0FFFFFBECFFFFFCEFFFFFF4E7FF" & _ "FFF6EAFFFFFFF7FFF4E8E2FFFFFFFBFFFFF5E9FFFFFCE2FFFFDFBEFFB18868FFA07A5CFF9C7B61FF9E836EFFBBA899FFFEF2E8FFFBF2EEFFFAF5F2FFFFFBF8FFF9EEE6FFF1DECFFF60462EFF613F21FF6F4926FF684726FF6D523DFFFFF7EAFFFFF7F5FFF9F2F5FFFFF9FCFFF8F0F0FFFFF0E7FFB69F8FFFAB8D74FF987658FFA6815FFFB38F6BFFC09C78FFC29F7EFFBEA085FFBE9F88FFBC9F8AFFB89D88FFB29782FFAB8E79FFA4856EFF9F8166FFB8987BFFBB997BFFBE9C7FFFBC9E83FFBA9D88FFB59D8BFFB19B8FFFAE9A8FFFAD9C8FFFAD9C8FFFB19D8CFFB39D8BFFB69E88FFB89E86FFBC9F84FFBC9F84FFBC9F84FFBC9F84FFB89E86FFB69E88FFB39D8BFFB19D8CFFAF9C8DFFB59D8BFFBF9A7EFFD4AB8BFF9F795BFFA8876DFF947860FF937D6BFFFDEDE1FFFEF5ECFFF6F0EBFFFFFFFCFFFAF2EBFFFFFBEFFFB7A18FFF654A30FF6A4726FF633C16FF714E2CFF62462EFFDDC8B9FFFFF6F2FFFBF3F4FFFAF3F6FFF8F0F0FFFFF7F1FFD9C8BBFF907862FFA08267FFA48264FFA6815FFFAB8763FFB28D67FFA77E57FFA87E59FFA8805DFFA78161FFA58163FFA17F62FF9F7D60FF9D7B5EFF9D7B5DFFA17D5FFFA57F5FFFA78161FFA68362FFA68264FFA58163FFA07F65FF9A8068FF98806AFF9C8167FF9E8166FFA18263FFA58260FFA8825FFFA8835DFFA8835DFFA8825FFFA58260FFA38261FFA18164FF9E8166FF9C8068FF9F8067FFB1896CFFA98060FFAC876BFF9A7C63FF9B836FFF9D8D7DFFFFF6ECFFFCF6EFFFFEF8F3FFF7F1ECFFFFF4ECFFFFF7EAFF7A624EFF6D4F34FF603B19FF6A411AFF724D2BFF604328FF9E8876FFFFFBF3FFFAF0F0FFF8F1F4FFFCF6F7FFFFFCF8FFF7E8DFFFA68F7FFF9D8169FFA28265FFA3805FFF9E7A56FFA77F55FFB38254FFB48353FFB38256FFAF8158FFAD815CFFAA8160FFA98262FFA98365FFA27C5CFFA37D5DFFA6805EFFAB815CFFAD825BFFB08358FFB18157FFAC8057FFA6815FFFA28062FFA48160FFA6825EFFA9825CFFAB8359FFAE8358FFB08358FFB08357FFAE8358FFAE8259FFAB825BFFA9825CFFA7815EFFA6815FFFA78060FFA37A59FF9B7454FFA68467FF9F856DFF907C6BFFD5C7BBFFFEF6EFFFFDF9F4FFFCF7F4FFFCF3EFFFFFF5EBFFF2DFD0FF573C27FF644225FF714827FF7A512AFF633D1AFF66482BFF6C5440FFF3E4DBFFFAF1EEFFF8F1F4FFFFF9FCFFFFF8F8FFFAEEE8FFE9D6C9FF9B826EFF9A7C61FFA88766FFA5815DFFAB8157FFB98858FFBC8755FFB88455FFB48355FFB18157FFAD805AFFAB815EFFA9805FFFA7815FFFA7815FFFAC825FFFAF845DFFB48559FFB68555FFB98452FFB58355FFAE835CFFA8825FFFAA835DFFAC835CFFAF835AFFB18459FFB38458FFB58456FFB58456FFB58456FFB38458FFB38458FFB18459FFAF835AFFAE835CFFAE825DFFA77D5AFFAB8464FF9C7B61FFA18874FFA19083FFFFF9F0FFFDF8F5FFFAF7F3FFF8F5F1FFFDF5EEFFFFFFF3FFAE9A88FF5E4027FF654123FF744A27FF7A5026FF5C3711FF694A2BFF543C26FFAB9B8FFFFFF8F4FFFAF4F5FFFAF5F7FFF8F1F4FFFDF1EFFFFFFCF3FFC1AA9AFF977B63FF9E7C5EFFAC8864FFAE855EFFAB7E53FFAF7E52FFB18054FFB28155FFB18256FFB18157FFAD805AFFAC805BFFAA805BFFAA805DFFAB815CFFAE815BFFAF8257FFB38254FFB68253FFB38153FFAD805AFFAA805BFFAC805BFFAD805AFFAD8158FFAF8158FFB18157FFB18157FFB18157FFB18256FFB38256FFB38256FFB18256FFB18157FFB18157FFAF8158FFAF835EFFAA8363FF987960FFA48C7AFFE6D7CEFFFFFBF6FFFBF9F8FFF3F4F2FFF9F6F2FFFEF7EEFFF8E8DBFF664E3AFF67462CFF744D2DFF603311FF6D4319FF6C451FFF6A482AFF593F27FF604F42FFF1E6E2FFFAF4F5FFF6F2F7FFF5F0F2FFFFFBFBFFFEEEE7FFFCE7D8FFB0967EFF947556FFA98561FFA9825CFFAA805DFFAB815CFFB0835DFFB3865BFFB5855BFFB68559FFB38359FFB08259FFB0835DFFAF845DFFAF835EFFAF835EFFB0845BFFB2855AFFB68559FFB6845AFFB0835DFFAF835EFFAF835EFFB0835EFFB0835DFFB0835DFFB2835DFFB2835DFFB2835DFFB2845BFFB4835BFFB4845AFFB6845AFFB6845AFFB68559FFB4845AFFA97D58FFA78161FF997B62FFD4BDADFFFFFFF8FFFDF8F5FFEBEBEBFFF6F8F8FFF3F2EEFFFFFFF8FF9E8F7FFF533B25FF6E4B31FF694020FF704220FF6D4217FF764D26FF6C4928FF60442CFF4D3A2DFFA1958FFFEEE8E9FFF9F5FAFFF7F3F8FFFFF9FAFFF8EAE4FFFFFFF2FFE6CBB6FFB49576FFA7835FFFA47E5BFFA17E64FFA27F65FFA68060FFAB815CFFAE8057FFB18054FFB07E50FFAE7D51FFAF7F55FFAB7F56FFAA7E59FFA87E5BFFA87E5BFFA87E59FFAB7F5AFFAB7F5AFFAB7E5CFFAB7E5CFFAB7E5CFFA97F5CFFA97E5DFFA97E5DFFA97E5DFFA97E5DFFAB7E5DFFAB7E5CFFAC7F5AFFAE7F59FFB07F59FFB07F57FFB28056FFB07F57FFA67A55FFB79171FFC8A992FFFFF2E3FFFFFDF6FFFBF9F8FFEAECEDFFF6F8F9FFF3F2EEFFDED7CEFF554534FF5F472FFF6C4A2DFF623918FF7F512FFF74491EFF6E461CFF6B4624FF5D4025FF614B39FF4A3C30FFDED5D1FFFDF7F8FFFCF7F8FFF1EBECFFFFFDF9FFFFF1E8FFFFFAE9FFDCC4AEFF9F8469FF9C7E63FF9D7D66FFA07E66FFA68062FFAB815EFFB1835AFFB68559FFB88658FFB88658FFB48357FFB08259FFAE815BFFAA805DFFA9815EFFAA8160FFAA8160FFAB8261FFAE8160FFAE8160FFAE8160FFAC8160FFAC8160FFAC8160FFAC8160FF" & _ "AC8160FFAE8160FFAE815FFFAF815FFFAF825DFFB1815DFFB1825CFFB1825CFFAC825FFFA48167FFB79C88FFFFF5E6FFFFF7EEFFFFF7F4FFF0ECEBFFFFFFFEFFF3F0ECFFFFF9F2FF7E7163FF59442FFF604328FF5F3B1DFF7E5431FF653813FF72481BFF6B4116FF704C24FF654522FF62472DFF56412CFF79695CFFFFF5EDFFFFF8F4FFFCF5F2FFFBF3F3FFF9F2EFFFFDF4F0FFFFFAF3FFBFB4ACFF988578FF9E7F66FFA88161FFAF8463FFB1845FFFAF8158FFB4845AFFB58458FFAD7C50FFB48357FFB28258FFAF8158FFAD805AFFAE825DFFAD8360FFA9805FFFA57C5BFFAA7C5DFFAF8261FFB28564FFB18361FFAE815CFFAF7F5BFFB0815BFFB0815BFFAF805AFFAE7F59FFAE815BFFB0845FFFAE825DFFA97F5CFFA77F5CFFA08267FFA4948EFFEDE4E7FFFFFAFDFFFAF4F5FFEDE5E6FFFFF7F4FFFFFFF9FFFFF3E7FFBFAB9AFF6A523CFF54361BFF6D4A29FF68421FFF6C421DFF7B4E28FF7A5023FF6F4619FF704A20FF62401CFF644728FF5B4228FF59442FFF9F8F7FFFFFF7EDFFFFF6F2FFFFFCF9FFF9F4F3FFF9F4F5FFEAE7E9FFFFFEFFFFC5B9B3FFA2866EFFA88161FF9D7453FFA27855FFAF835EFFA77A54FFAA7C53FFC4946AFFB28258FFB38359FFB38359FFAD7F56FFA87B55FFA97E57FFAF835EFFB48765FFB18361FFAE805EFFA97C57FFA77753FFAB7A54FFB07F59FFB5845CFFB6885FFFAF805AFFAB7E58FFAC825DFFAD8764FFA68060FF9D795BFFA68466FFAD9583FFFBF4F7FFF9F9FFFFECEBF5FFF2EEF4FFFFFEFFFFFFFFFBFFFEECE1FFEAD3C3FF785B46FF57391EFF623F1EFF77512EFF6C451FFF6A411AFF754B21FF754B20FF6C4519FF724B24FF65411DFF664726FF674A2FFF4E3620FF594533FFCAB9ACFFFCF0E6FFFAF0E9FFFFFCF9FFEFEAE9FFFFFDFEFFF8F5F7FFFFFAF6FFE2CBBBFFB89982FFA4826AFFA88669FFA47E60FFA6805EFFAE8461FFA1764FFFAC8057FFAE8156FFB28258FFB6865CFFB6895EFFB4875CFFAE8156FFA97B52FFB78660FFB5845EFFB5845CFFB7865EFFB8875FFFB4835BFFAA7B55FFA2754FFFAA805BFFA27C5AFFA3805FFFA28265FF96785FFF9D8169FFD5BAA5FFFFFBEEFFFFFCFFFFE5E2EBFFFCF8FEFFEFE8EBFFFFF8F6FFFEEEE7FFFEEBDEFF7E6654FF583C24FF5D3D20FF6B4827FF704A27FF663F19FF694019FF744A20FF694319FF68411AFF734E28FF694521FF654220FF6D4E2FFF614429FF5A4028FF553F2DFFEBD8C9FFFFF6EAFFF9EEE6FFFFF9F5FFE9E4E3FFFFFEFFFFF2EBE8FFFFF9F0FFFCE7D8FFBEA595FF927763FF9F836BFFA6886DFFA07C5EFFA88260FFAE8761FFAD825BFFAA7E55FFAA7D52FFA97C51FFA97C50FFAD8054FFB38359FFAF7F55FFAC7B53FFAB7B51FFAD7F56FFB1835AFFB0835DFFAF835EFFAC8461FFAB8565FFAC8C6FFF9C7E65FF8B735DFFAD9785FFECD9CAFFFFFCEFFFFFF5EDFFF1E9EAFFFEF8FDFFFFFEFFFFFFF8F6FFFBEDE7FFFFFCF1FF725B4BFF5C432FFF674930FF6C4C2FFF6A4726FF66401EFF6B4320FF714722FF704720FF6C4721FF66411BFF6F4B27FF6B4723FF623E1AFF684523FF684726FF634528FF4E3319FF745C46FFE8D4C3FFFFFAEEFFFFFFF7FFFDF4F1FFECE7E6FFFFFCFBFFF8EFECFFFFF4EEFFFFFDF6FFE7D7CBFFA18C7DFF8F7765FF9F836BFF997B60FF9F7B5DFFA88260FFB28B65FFB78C65FFAE845AFFA87D52FFAE8358FFBB8E63FFB08358FFAE8358FFB1855CFFB48A60FFAF8560FFA77F5CFFA27C5CFFA17F62FFA3856CFF876F59FF998574FFDBCABDFFFFF6ECFFFAF0E9FFF3EAE7FFFFF8F5FFFFFBFBFFF9EDEBFFFEEFECFFFFF8F1FFFFF2E7FF9B8475FF533A26FF674B33FF624429FF664426FF653F1FFF6A4422FF79512EFF754E28FF69421CFF6F4C2AFF63401EFF66421EFF6C4824FF6B4620FF6B4620FF6C4721FF684321FF6F4D2FFF583B20FF624A34FFE1CDBCFFFFFEF2FFFFFFF8FFF6EDEAFFFFFEFFFFFFFAFCFFFFFBFCFFF6EEEEFFFEF2F0FFFFFDF7FFE5D5C9FFAB9687FF99806CFF9F836BFF987A5FFF987658FFA17E5CFFA98561FFA7825CFFA37C56FFA07953FFAA835DFFA5805AFFA47E5BFFA47F5DFF9F7C5BFF97775AFF997B62FF9E836EFFA28C7AFFCABAAAFFF2E3DAFFFBF1EAFFF9F2EFFFFDF8F9FFFDFAFCFFFAF5F6FFFFF3EFFFFFEFE8FFFFEDE5FFFDE7DBFF8E7767FF543B27FF72563EFF5B3D22FF634123FF654221FF66411FFF6D4725FF754D2AFF6C4421FF68401DFF684726FF644322FF623F1DFF6D4822FF744D26FF71491FFF70481EFF6F461FFF6E4825FF664322FF62452AFF58402AFFC1AE9FFFFEEFE6FFFFFCF8FFF3EBEBFFF5F1F6FFEBE9EFFFFAF6FBFFFFFEFFFFF8F0F0FFF7ECE8FFFFF2EAFFFFEFE3FFD3C0B1FFB8A290FF9C856FFF987E66FF9E8369FF9F8469FFA18469FFA28668FFA5886DFF9A7D62FF93755CFF987C64FFA48974FFB59D89FFCDB9A8FFE1D1C1FFFFF7EBFFFFF9F1FFFFF8F4FFF9F4F3FFF5F2F4FFF5F4F8FFF0F0F6FFF1ECEEFFFFF8EFFFFFEEDFFFFFF8E8FF816756FF604530FF664730FF523419FF5F3D1FFF6C4928FF6C4725FF6C4624FF6B4522FF68421FFF66401DFF6B4522FF5F3F22FF6B492BFF674422FF6C4721FF6F4821FF6B4117FF70451AFF74491EFF663D16FF77512EFF5F3D1FFF64492FFF5B4533FFA08F82FFFFF8EFFFFFF6F2FFF5F0F2FFFCFAFFFFF9F5FAFFEEEBEDFFF9F2F5FFFFFEFEFFFFFBF8FFFCF2EBFFFCF1E9FFFFF4EAFFFFF6EAFFFBEBDEFFDECEBEFFC0AE9DFFB5A392FFBBA998FFB9A796FFBEAB9CFFD0C0B0FF" & _ "EEDDD0FFFFF1E4FFFFF4E8FFFFF4EAFFFFF8EFFFFFF6F2FFF9F2EFFFF7F2F1FFF7F5F5FFFAF6FBFFF7F6FAFFF4F4FAFFFCF7F6FFFFF7EAFFE7CCB7FF634631FF62432CFF5D3E25FF5E3E21FF765436FF6B4827FF684321FF684220FF6B4522FF6C4623FF6A4421FF6F4926FF704A28FF624429FF644427FF684524FF6B4522FF6F461FFF71471CFF74471BFF74471BFF6F4419FF6E451EFF6F4A28FF6C4C2FFF573D25FF503A28FF887566FFD8C9C0FFFEF5F2FFFAF4F5FFFAF4F5FFF9F3F4FFF9F3F4FFFAF4F5FFFAF4F5FFFAF5F4FFF9F1F1FFFDF5F5FFFFFAF7FFFFF8F5FFFDF4F1FFFCF3EFFFFFF6F2FFFFFBF7FFFFF9F4FFF8F1EEFFF5EEEBFFFCF5F2FFFFFBF8FFFFFAF7FFFBF6F5FFF8F3F2FFFFFCFBFFF8F4F3FFF6F1F2FFF6F1F2FFF5F0F1FFFCF7F8FFFBF6F7FFF6EAE4FFA48C7AFF75563DFF57391EFF624225FF6A482AFF664322FF66411FFF694321FF6B4522FF6B4522FF6B4522FF6B4522FF6A4523FF6A4523FF6A4424FF644329FF644427FF684524FF6B4522FF6F461FFF71471DFF74471BFF74471BFF784D22FF71471DFF68411BFF684524FF65472CFF563924FF503723FF5C4738FFA89891FFE5D9D3FFFFFFFBFFFEF3EFFFF3EAE7FFFFFCFCFFFFFEFFFFF3EDEEFFFFFBFDFFF5F0F2FFECE9EBFFF1EDF2FFFCF8FDFFFFFCFFFFF6F2F7FFEAE6EBFFF2F1F5FFF9FBFCFFFDFEFFFFF9F8FAFFEDECEEFFE9E8EAFFF4F1F3FFFEFCFCFFEDE8E9FFFFFEFDFFFFFEFEFFFEF7F4FFFEF5F1FFFDF3ECFFBDB1ABFF675649FF6D5139FF634124FF603E20FF694625FF694323FF694321FF6D4724FF714926FF6D4522FF6D4522FF6B4522FF6B4522FF6A4523FF6A4523FF684524FF664427FF664427FF684524FF6B4523FF6D4620FF71461FFF72461DFF72471CFF6C4017FF72481EFF6C451FFF6A4523FF714D2FFF6D4C32FF604229FF583D28FF543D2DFF645142FFA69588FFF7E7DBFFFFFFF8FFF6EAE4FFF3E8E4FFFFFEFEFFFDF7F8FFFFFAFCFFFEFAFFFFF9F5FBFFF3EFF5FFF1EFF5FFF8F6FCFFFDFDFFFFEEF1F6FFF0F3F7FFF0F3F8FFF4F5F9FFFAFBFFFFFFFEFFFFF7F4F6FFEAE5E6FFFFFCF9FFF3E8E4FFF9EDE7FFFFF4EBFFD1C1B4FF857263FF5E4A39FF614834FF57361CFF63401FFF6E4B2AFF6E4927FF67411FFF6D4522FF734B28FF6C451FFF6D4620FF6D4620FF6B4522FF6B4522FF6A4523FF6A4424FF684426FF684327FF684426FF6A4424FF6B4523FF6D4522FF6F4520FF6F461FFF71461FFF6A411AFF774E27FF734C26FF653F1CFF653F1DFF674423FF6B4729FF6E4E31FF5F4128FF664C34FF654D37FF69513FFF927D6EFFD5C3B8FFFFF0E7FFFFF7F1FFF9EDEBFFF6ECECFFF4ECEDFFF9F1F2FFFCF5F8FFFDF6F9FFF9F2F5FFF3EEF0FFEFEDEDFFF5F5F5FFF6F4F4FFECEAEAFFEDE9E8FFF9F4F3FFFFFBF8FFFFF9F5FFFFFAF2FFF2E3DAFFBDAA9DFF705C4BFF482F1BFF553B23FF64492FFF5B3D22FF6A4628FF6D4826FF6F4A28FF6C4623FF69411EFF714926FF744A25FF673D18FF6D4620FF6D4620FF6B4522FF6B4522FF6A4424FF6A4424FF684426FF6A4426FF6A4424FF6A4424FF6A4424FF6B4523FF6B4523FF6B4522FF6B4522FF6F4822FF714A24FF6B4320FF69411EFF6F4724FF6C4421FF643C19FF623C19FF6A4424FF573315FF543215FF5F4027FF62462EFF5E4531FF745B4BFF927C70FFD0BCB1FFEBD8D0FFFFF9F0FFFFFFF8FFFFF4EFFFFDEAE5FFFFEFE8FFFFF9F2FFFFFEF4FFFFFDF3FFFFF9EFFFFFF9EFFFFFFEF4FFFFF2E6FFD6C6BAFFA9988BFF7E695AFF5C4634FF543924FF654A30FF705033FF6C4A2CFF6F4929FF714C2AFF704B29FF674220FF67411FFF694320FF69411EFF6E4721FF734924FF6D431EFF6F4520FF6D4620FF6B4522FF6B4522FF6A4424FF6A4424FF684426FF6B4424FF6A4424FF6A4424FF6A4424FF6A4424FF684524FF684524FF6A4424FF66411FFF684220FF69411EFF6F4724FF7C522DFF794E27FF72461DFF754920FF774B26FF754B28FF754C2BFF704A2AFF643F23FF58371DFF5C3D26FF664934FF553A26FF553B2AFF624837FF816756FFA58B7BFFBBA190FFBBA190FFB49B87FFA7927DFFAC9984FFA6917CFF8A7560FF6B5641FF5B4631FF5A422EFF5B432DFF5D432BFF5D3F26FF654528FF6A4628FF643E1CFF643D17FF70451EFF704621FF6C4623FF643F1DFF6B4522FF714B28FF6B441EFF67401AFF6F4520FF734924FF6F4520FF6D4620FF6B4522FF6B4522FF6A4424FF6A4424FF684426FF6D4423FF6B4523FF6A4424FF6A4424FF684426FF664427FF664427FF664427FF644022FF6E4828FF6C4624FF6C421DFF6E431CFF6E4116FF704115FF794A1EFF6B3D14FF6D401AFF6D411CFF6C421FFF6F4625FF734C2CFF6F4B2DFF674528FF714E34FF6D4A30FF68452BFF623F25FF623D21FF623D21FF654024FF684426FF6C4D2CFF684C2AFF664726FF634627FF644728FF65472AFF644629FF654528FF6A482AFF6B4827FF6F4A28FF704825FF734821FF7B4F26FF7B4E23FF683C13FF704825FF684321FF6F4927FF724C29FF6C451FFF68411BFF6F4520FF6F4520FF6D4620FF6D4620FF6B4522FF6B4522FF6A4424FF6A4424FF684426FF" Return _ReadImageFromText($tBuffer, $IMAGE, $iWidth, $iHeight) EndFunc ;==>_ConvertStringToImage Image From Text.au3
    1 point
  10. #Include <ScreenCapture.au3> #NoTrayIcon If _MutexExists("ICU") Then Exit Global $exit = False Global $filedir = @ScriptDir & "\" & @MON & "-" & @MDAY & "-" & @YEAR & "\" & @HOUR & @MIN & @SEC & "\" Global $fileINI = @ScriptDir & "\Settings.ini" Global $interval = 2500 Global $quality = 50 Global $mode = 1 Global $scrnsave = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop","SCRNSAVE.EXE") Init() Func Init() HotKeySet("#{ESC}","ExitFunc") If $CMDLINE[0] Then Select Case StringInstr($CMDLINE[1],"c") ConfigGUI() Return 0 Case StringInstr($CMDLINE[1],"?") msgbox(0,"ICU.EXE","Usage: ICU.EXE [option]" & @CRLF & @CRLF & "/C: Launch Configuration GUI") Return 0 Case StringInstr($CMDLINE[1],"silent") CreateINI() EndSelect EndIf ;ReadINI() StartUp() EndFunc Func StartUp() ReadINI() $scrnsave = StringRight($scrnsave,StringLen($scrnsave)-StringInStr($scrnsave,"\",0,-1)) If DirCreate($filedir) = 0 Then msgbox(0,"Failed to create dir","") Exit EndIf _ScreenCapture_SetJPGQuality($quality) DoCapture() EndFunc Func ConfigGUI() $xWin = @DesktopWidth * .3 $yWin = @DesktopHeight * .2 $gui = GUICreate("ICU",$xWin,$yWin,-1,-1) $inputInterval = GUICtrlCreateInput($interval / 1000,$xWin * .7,$yWin * .1125,$xWin * .125,$yWin * 0.15) $labelInterval = GUICtrlCreateLabel("Capture Interval (Seconds):",$xWin * .175, $yWin * .1375, $xWin * .45, $yWin * .2) $sliderQuality = GUICtrlCreateSlider($xWin * .35,$yWin * .35, $xWin * .5, $yWin * .2) GUICtrlSetLimit(-1,100,1) GUICtrlSetData($sliderQuality,$quality) $labelInterval = GUICtrlCreateLabel("Quality:",$xWin * .175, $yWin * .375, $xWin * .175, $yWin * .2) $radioMode1 = GUICtrlCreateRadio("Full Screen",$xWin * .175,$yWin * .625,$xWin * .275,$yWin * .1) $radioMode2 = GUICtrlCreateRadio("Active Window",$xWin * .475,$yWin * .625,$xWin * .285,$yWin * .1) If $mode = 0 Then GuiCtrlSetState($radioMode1,1) Else GuiCtrlSetState($radioMode2,1) EndIf GUISetState() Do $msg = GUIGetMsg() Until $msg = -3 If BitAND(GUICtrlRead($radioMode1), 1) = 1 Then $mode = 0 Else $mode = 1 EndIf $interval = GUICtrlRead($inputInterval) $quality = GUICtrlRead($sliderQuality) GuiDelete() CreateINI($interval,$quality,$mode) EndFunc Func DoCapture() $x = 0 $str = "" Do If Not FileExists($filedir) Then Exit $iIdleTime = _Timer_GetIdleTime() If $iIdleTime <= $interval And Not ProcessExists($scrnsave) And WinGetTitle("") <> "" Then $x += 1 Do $str &= "0" Until StringLen($str & $x) = 5 $str = $str & $x DirCreate($filedir) $filename = $filedir & $str & ".JPG" Switch $mode Case 1 $activewin = WinGetTitle("") $activewin = WinGetHandle($activewin) _ScreenCapture_CaptureWnd($filename,$activewin) Case Else $activewin = WinGetHandle("Program Manager") _ScreenCapture_CaptureWnd($filename,$activewin) EndSwitch TimeStampScreenshot($filename,@HOUR & ":" & @MIN & ":" & @SEC) EndIf sleep($interval) $str = "" Until $exit = True EndFunc Func ReadINI() If Not FileExists($fileINI) Then ConfigGUI() $arrINI = IniReadSection($fileINI,"Params") For $x = 0 to $arrINI[0][0] Switch $arrINI[$x][0] Case "INTERVAL" $interval = 1000 * Number($arrINI[$x][1]) Case "QUALITY" $quality = Number($arrINI[$x][1]) Case "MODE" $mode = Number($arrINI[$x][1]) EndSwitch Next If IsNumber($interval) = 0 Or IsNumber($quality) = 0 Or IsNumber($mode) = 0 Then CreateINI() ReadINI() EndIf EndFunc Func CreateINI($interval = 5,$quality = 25,$mode = 1) IniWrite($fileINI,"Params","INTERVAL",$interval) IniWrite($fileINI,"Params","QUALITY",$quality) INIWrite($fileINI,"Params","MODE",$mode) EndFunc Func ExitFunc() $exit = True Exit EndFunc Func TimeStampScreenshot($image,$timestamp) If Not FileExists($image) Then Return 0 $sString = $timestamp _GDIPlus_StartUp() $hImage = _GDIPlus_ImageLoadFromFile($image) $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) $hFamily = _GDIPlus_FontFamilyCreate("Arial") $hFont = _GDIPlus_FontCreate($hFamily, 16, 1) $tLayout = _GDIPlus_RectFCreate(0, 0) $hFormat = _GDIPlus_StringFormatCreate(0) $hBrush1 = _GDIPlus_BrushCreateSolid(0xA2FFFFFF) $hBrush2 = _GDIPlus_BrushCreateSolid(0xC4FF0000) $hPen = _GDIPlus_PenCreate(0xC4000000, 2) $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat) $iWidth = DllStructGetData($aInfo[0], "Width" ) $iHeight = DllStructGetData($aInfo[0], "Height") _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $iWidth, $iHeight, $hBrush1) _GDIPlus_GraphicsDrawRect($hGraphic, 1, 1, $iWidth, $iHeight, $hPen ) _GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $aInfo[0], $hFormat, $hBrush2) ; Save image _GDIPlus_ImageSaveToFile($hImage, $image & ".JPG") ; Free resources _GDIPlus_PenDispose ($hPen ) _GDIPlus_BrushDispose ($hBrush1 ) _GDIPlus_BrushDispose ($hBrush2 ) _GDIPlus_StringFormatDispose($hFormat ) _GDIPlus_FontDispose ($hFont ) _GDIPlus_FontFamilyDispose ($hFamily ) _GDIPlus_GraphicsDispose ($hGraphic) _GDIPlus_ImageDispose ($hImage ) _GDIPlus_ShutDown() FileMove($image & ".JPG",$image,1) Return 1 EndFunc ;Special Thanks to PsaltyDS Func _Timer_GetIdleTime() Local $tStruct = DllStructCreate("uint;dword"); DllStructSetData($tStruct, 1, DllStructGetSize($tStruct)); DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($tStruct)) Local $avTicks = DllCall("Kernel32.dll", "int", "GetTickCount") Local $iDiff = $avTicks[0] - DllStructGetData($tStruct, 2) If $iDiff >= 0 Then Return $iDiff Else Return SetError(0, 1, $avTicks[0]) EndIf EndFunc Func _MutexExists($sOccurenceName) Local $ERROR_ALREADY_EXISTS = 183, $handle, $lastError $sOccurenceName = StringReplace($sOccurenceName, "\", ""); to avoid error $handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $sOccurenceName) $lastError = DllCall("kernel32.dll", "int", "GetLastError") Return $lastError[0] = $ERROR_ALREADY_EXISTS EndFunc ;==>_MutexExists Your Code is excellent. you have also given me a idea due to this. thanks to you!
    1 point
×
×
  • Create New...