Jump to content

how to make _WinAPI_UpdateLayeredWindow work in multiple layeredwindows?


senatin
 Share

Go to solution Solved by senatin,

Recommended Posts

  • Solution

I read lots of samples and definition and I still can't manage to fix this.

#Region Awake
#include <Timers.au3>
#include <GDIPlus.au3>
#include <WinAPISysWin.au3>
#include <WinAPIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

_GDIPlus_Startup()
#EndRegion

#Region Declaration

#Region Variables
Global $iElapse = 20
;StickManArray
;[Bmp, Name, Action, Width, Height, Xpivot, Ypivot, Frame, FramexSec, rootSpeed
Global Const $StickManArray[] = [_GDIPlus_BitmapCreateFromMemory(StickMan64String()), "StickMan", "Walk", 102, 202, 51, 202, 8, 5, 102]
;[iTimer,GUI,$iElapse,Bmp,Name,ActiveBool,Action,Speed,Direction,FramexLapse,getxpos,getypos
Global $ObjectArray[0][12]
#EndRegion

#Region HotKey
HotKeySet( "!p", "TestAddAnim")
#EndRegion

#EndRegion

#Region Start
;~ Opt("WinTitleMatchMode", 3) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
#EndRegion

#Region Update

Do
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
    EndSwitch
Until False

#EndRegion

#Region System

Func Animation($hWnd, $iMsg, $iIDTimer, $iTime)
    #forceref $hWnd, $iMsg, $iIDTimer, $iTime
    ;[Action,Width,Height,Xpivot,Ypivot,Xpos,Ypos,Frame,FramexLapse,rootSpeed,direction,PixelxFrame,CurrentFrame
    Local Static $objectAnimArray[0][13]
    Local $targ
    ConsoleWrite(@CR&"+")
    For $i=0 To UBound($ObjectArray)-1
        ConsoleWrite(" | Animation:0.1 | ObjectArray:"&$iIDTimer&"="&$ObjectArray[$i][0]&" | ojectANim UBound:"&UBound($objectAnimArray))
        If $i > UBound($objectAnimArray) Then Return
        If $iIDTimer = $ObjectArray[$i][0] And $ObjectArray[$i][5] Then
            $targ = $i
            ExitLoop
        EndIf
    Next

    ConsoleWrite(" | Animation:1 | $targ:"&$targ&" $objectAnimArray UBound:"&UBound($objectAnimArray))
    If $targ > UBound($objectAnimArray) -1 Then
        ConsoleWrite(@CR&"  ")
        $temparray = TargetData($targ)
        ConsoleWrite(@CR&"+")
        If Not @error Then
            $tempstring = $temparray[0]
            For $i=1 To UBound($temparray)-1
                $tempstring &= "|"&$temparray[$i]
            Next
            $tempstring &= "|"& -1
            ConsoleWrite(" | Animation:2 | $tempstring:"&$tempstring)
            _ArrayAdd($objectAnimArray, $tempstring)
            $tempos = WinGetPos($ObjectArray[$targ][1])
            ConsoleWrite(" | Animation:2.1 | xpos:"&$tempos[0]&" | ypos:"&$tempos[1])
            $tempos[0] -= $objectAnimArray[$targ][3]
            $tempos[1] -= $objectAnimArray[$targ][4]
            WinMove( $ObjectArray[$targ][1], "", $tempos[0], $tempos[1])
            ConsoleWrite(" | Animation:2.2 | xpos:"&$tempos[0]&" | ypos:"&$tempos[1])
        Else
            Return
        EndIf
    ElseIf $ObjectArray[$targ][6] <> $objectAnimArray[$targ][0] Then
        $tempos = WinGetPos($ObjectArray[$targ][1])
        $tempos[0] += $objectAnimArray[$targ][3]
        $tempos[1] += $objectAnimArray[$targ][4]
        WinMove( $ObjectArray[$targ][1], "", $tempos[0], $tempos[1])

        $objectAnimArray[$targ][0] = $ObjectArray[$targ][5]
        ConsoleWrite(@CR&"  | ")
        $temparray = TargetData($targ)
        ConsoleWrite(@CR&"+")
        If Not @error Then
            ConsoleWrite(" | Animation:3 | $temparray:")
            For $i=0 To UBound($temparray)-1
                ConsoleWrite($temparray[$i]&"|")
                $objectAnimArray[$targ][$i] = $temparray[$i]
            Next
            $objectAnimArray[$targ][12] = -1
            $tempos = WinGetPos($ObjectArray[$targ][1])
            $tempos[0] -= $objectAnimArray[$targ][3]
            $tempos[1] -= $objectAnimArray[$targ][4]
            WinMove( $ObjectArray[$targ][1], "", $tempos[0], $tempos[1])
        Else
            Return
        EndIf
    EndIf
    ConsoleWrite(@CR&"  ")
    $objectAnimArray[$targ][12] = PlayAnim($targ, $ObjectArray[$targ][3], $objectAnimArray[$targ][1], $objectAnimArray[$targ][2], _
                                   $objectAnimArray[$targ][5], $objectAnimArray[$targ][6], $objectAnimArray[$targ][7], _
                                   $objectAnimArray[$targ][8], $objectAnimArray[$targ][9], $objectAnimArray[$targ][10], _
                                   $objectAnimArray[$targ][11], $objectAnimArray[$targ][12])

EndFunc

Func PlayAnim($targ, $bmp, $width, $height, $xpos, $ypos, $frame, $framexlapse, $rootspeed, $direction, $pxlxframe, $currentframe)
;~     ConsoleWrite(" | PlayAnim:0.1 | $direction:"&$direction&" | $ObjectArray[$targ][0]:"&$ObjectArray[$targ][0])

    $currentframe += $framexlapse
    If $currentframe >= $frame Then $currentframe -= $frame
    $newxpos = $xpos + $currentframe * $width

    ConsoleWrite(" | PlayAnim:1 | $currentframe:"&$currentframe&" | xpos:"&$newxpos&" pos:"&$ypos)
    $hBmp = _GDIPlus_BitmapCreateFromScan0($width, $height)
    $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)
    _GDIPlus_GraphicsSetSmoothingMode($hGfx, 2)
    _GDIPlus_GraphicsDrawImageRectRect( $hGfx, $bmp, $newxpos, $ypos, $width, $height, 0, 0, $width, $height)
    _GDIPlus_GraphicsDispose($hGfx)

    If $direction < 0 Then _GDIPlus_ImageRotateFlip($hBmp, 4)

    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)
    _GDIPlus_ImageDispose($hBmp)

    If $direction <> 0 Then
        $tempos = WinGetPos($ObjectArray[$targ][1])
        ConsoleWrite(" | PlayAnim:2 | WinMove[Targ:"&$targ&"] "&$tempos[0])
        $tempos[0] += $pxlxframe*$direction
        ConsoleWrite(" -> "&$tempos[0])
        WinMove( $ObjectArray[$targ][1], "", $tempos[0], $tempos[1])
    EndIf

    $hDestDC = _WinAPI_GetDC($ObjectArray[$targ][1])
    $hScrDC = _WinAPI_CreateCompatibleDC($hDestDC)
    $hOld = _WinAPI_SelectObject($hScrDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tPTSrce = DllStructCreate($tagPOINT)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow( $ObjectArray[$targ][1], $hDestDC, 0, $tSize, $hScrDC, $tPTSrce, 0, $tBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hDestDC)
    _WinAPI_DeleteDC($hScrDC)
    _WinAPI_DeleteObject($hBitmap)
    Return $currentframe

EndFunc

Func TargetData($targ)
    ;[Name,ActionBool, Width, Height, Xpivot, Ypivot, Frames, FramexSec, rootSpeed
    Local Static $targData[0][9]
    Local Const $actData[] = ["Walk"]
    Local $temparray[0]

    $tempdataaction = (UBound($targData, 2)-1)/UBound($actData)
    If UBound($targData) = 0 Then
        $tempstring = $ObjectArray[$targ][4]
        ConsoleWrite(@CR&"      ")
        $tempobject = GetBitmapArray($ObjectArray[$targ][4])
        ConsoleWrite(@CR&"  ")
        $tempholdaction = (UBound($tempobject)-2)/$tempdataaction-1
        ConsoleWrite(" | TargetData:1 | $tempholdaction:"&$tempholdaction)
        For $j=0 To UBound($actData)-1
            ConsoleWrite(" | TargetData:2 | $actData:"&$actData[$j])
            For $i=0 To $tempholdaction
                $tempnum = $i*($tempdataaction)+2
                ConsoleWrite(" | TargetData:3 | $tempnum:"&$tempnum)
                If $tempobject[$tempnum] = $actData[$j] Then
                    $tempstring &="|"& True &"|"&$tempobject[$tempnum+1]&"|"&$tempobject[$tempnum+2]&"|"&$tempobject[$tempnum+3]&"|"& _
                                    $tempobject[$tempnum+4]&"|"&$tempobject[$tempnum+5]&"|"&$tempobject[$tempnum+6]&"|"&$tempobject[$tempnum+7]
                    ExitLoop
                EndIf
                If $i = $tempholdaction Then $tempstring &="|"& False &"|||||||"
            Next
        Next
        ConsoleWrite(" | TargetData:4 | $tempstring:"&$tempstring)
        _ArrayAdd($targData, $tempstring)
    EndIf
    ConsoleWrite(" | TargetData:5 | $targData UBound:"&UBound($targData))
    For $i=0 To UBound($targData)-1
        If $ObjectArray[$targ][4] = $targData[$i][0] Then
            ConsoleWrite(" | TargetData:6 | Object name:"&$ObjectArray[$targ][4])
            For $y=0 To UBound($actData)-1
                If $ObjectArray[$targ][6] = $actData[$y] Then
                    ConsoleWrite(" | TargetData:6.1 | $targData["&$actData[$y]&"]:"&$targData[$i][1])
                    If Not $targData[$i][1] Then
                        ConsoleWrite(" | TargetData:6.2 | $ObjectArray[$targ][2]:False | Returning @Error")
                        $ObjectArray[$targ][5] = False
                        Return SetError( 1)
                    EndIf
                    $xpos = 0
                    $ypos = 0
                    If $y > 0 Then $ypos = $targData[$i][($y-1)*$tempdataaction+1+6] + $targData[$i][$y*$tempdataaction+1+2]
                    $pxlxframe = Round((1/$targData[$i][$y*$tempdataaction+7])*$targData[$i][$y*$tempdataaction+8])
                    $tempstring = $actData[$y]&"|"&$targData[$i][$y*$tempdataaction+2]&"|"&$targData[$i][$y*$tempdataaction+3]&"|"& _
                                  $targData[$i][$y*$tempdataaction+4]&"|"&$targData[$i][$y*$tempdataaction+5]&"|"&$xpos&"|"&$ypos& _
                                  "|"&$targData[$i][$y*$tempdataaction+6]&"|"&$ObjectArray[$targ][9]&"|"&$targData[$i][$y*$tempdataaction+8]& _
                                  "|"&$ObjectArray[$targ][8]&"|"&$pxlxframe
                    ConsoleWrite(" | TargetData:7 | $tempstring:"&$tempstring)
                    _ArrayAdd($temparray, $tempstring)
                    Return $temparray
                EndIf
            Next
            ConsoleWrite(" | TargetData:8 | Returning @Error")
            Return SetError( 1)
        EndIf
    Next
EndFunc

Func GetBitmapArray($targname)
    ConsoleWrite(" | GetBitmapArray:1 | $StickManArray[1]:"&$StickManArray[1]&" | Stargname:"&$targname)
    If $StickManArray[1] = $targname Then Return $StickManArray
    Local $temparray[]
    Return $temparray
EndFunc

Func CreateAnim($targ, $action, $speed, $direction, $xpos, $ypos)
    Local $timexframe, $framexlapse = 1
;~     ConsoleWrite(@CR&"+")
    For $i=0 To UBound($targ)-1
        If $action = $targ[$i] Then
            $timexframe = Round(1000/(($speed/$targ[$i+7])*$targ[$i+6]))
            ConsoleWrite(" | CreateAnim:1 | Name:"&$targ[1]&" | $targ:"&$targ[$i])
            ExitLoop
        EndIf
    Next

    If $timexframe < $iElapse Then
        $timexframe = $iElapse
        $framexlapse = Round($iElapse/$timexframe)
    EndIf
    ConsoleWrite(" | CreateAnim:2 | $timexframe:"&$timexframe&" | $framexlapse:"&$framexlapse)
    $hGUI = GUICreate("", 100, 100, $xpos, $ypos, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUISetState()
    $tempos = WinGetPos($hGUI)
    _ArrayAdd($ObjectArray, "||"&$timexframe&"|"&$targ[0]&"|"&$targ[1]&"|"& True &"|"&$action&"|"&$speed&"|"&$direction&"|"&$framexlapse& _
              "|"&$tempos[0]&"|"&$tempos[1])
    $ObjectArray[0][1] = WinGetHandle($hGUI)
    $numtarg = UBound($ObjectArray)-1
    ConsoleWrite(" | CreateAnim:3 | $ObjectArray:"&$ObjectArray[$numtarg][0]&"|"&$ObjectArray[$numtarg][1]&"|"&$timexframe&"|"&$targ[$numtarg]& _
                "|"&$targ[1]&"|"& True &"|"&$action&"|"&$speed&"|"&$direction&"|"&$framexlapse)
    $ObjectArray[$numtarg][0] = _Timer_SetTimer($hGUI, $timexframe, "Animation")
EndFunc

#EndRegion

#Region I/O

Func TestAddAnim()
    ConsoleWrite(@CR&"> | Press I/O")
    ConsoleWrite(@CR&">  ")
    CreateAnim($StickManArray, "Walk", 20, 1, 400, 400)
;~     CreateAnim($StickManArray, "Walk", 20, -1, 450, 450)
EndFunc

#EndRegion

#Region Base64 String Code
Func StickMan64String($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Base64String
    $Base64String &= '57oAiVBORw0KGgoAAAAADUlIRFIQAAADMABYyggGIQAoeuml+QAYCXCASFlzAAALEwEMAAEAmpwYAAAKAGZpVFh0WE1MADpjb20uYWRvQGJlLnhtcABaAAAAPD94cGFjawBldCBiZWdpbgA9Iu+7vyIgaQBkPSJXNU0wTQBwQ2VoaUh6cgBlU3pOVGN6awBjOWQiPz4gPAR4OgBAbWV0YSAAeG1sbnM6eD0aIgJXOgALARYvIiBBAiJ0az0iQQEYIABYTVAgQ29yZQAgNy4xLWMwMAAwIDc5LjljYwBjNGRlLCAyMAAyMi8wMy8xNAAtMTE6MjY6MRQ5IAQAIgBucmRmMDpSREYENoAGPSIAaHR0cDovL3cAd3cudzMub3IAZy8xOTk5LzAgMi8yMi2AEC1zAHludGF4LW5zAiOFIERlc2NyaUBwdGlvbiCBB2HAYm91dD0iAFWDYWRtcAYrbnOEk4CYL4B4YXAvMS4wgWkJAhRkY4YTcHVybAECPmRjL2VsZW3QZW50c4AVMYYVACokTU0bK21thhZzdAxFdoBImRZzVHlwAGUvUmVzb3VyUGNlRXZAHCOHD1IeZYdGoA+ACwYPcGhv4HRvc2hvFEGGB4pCOHRpZhQcQQaKCmV4DmmUCkEGhgpwOkNyAGVhdG9yVG9vCmwFj1AFHyAyMy4AMyAoV2luZG9Id3MpCAxlRMAAPQIiAZItMTItMjcAVDA1OjIzOjWAOCswODowMIMKQk3ApmRhdGEGCzOALTAxLTAyVEAKDDIwAJ4KC29kaWYCeZ4KZGM6Zm9yBG1hAG5pbWFnZRAvcG5nAhBNTToASW5zdGFuY2UQSUQ9IkAELmlpAGQ6Njk0YzFkAGEyLWEyM2MtAGVlNDUtOTE3ADctNDJiOGUwQGNlMzc1YsUPRDhvY3UBlcEPA9hkbwZjYAimMTo5N2ZiADkzYjAtNWIzADAtMjg0My04ADc5Zi01ODUzgDBhMjhkYWGmCchP'
    $Base64String &= 'cmlgfGFsqQqhEgJkIAo0MTBkNzhANjUtY2E5AHRjAeAIYmNlZS1mYQA0ZTY1NDIzZQYz4AjnDkNvbG9y4yAkYCMzIiChPcELgAqiYeFrPSIxhAJYYU0kbHWDAjcyAH8wLzYxoQDkA1n8A8cDVW5iaUAsMiIg4UXjD1ODYJcAEDY1NTM15AIAUGl4ZWxYRGlF4BtzYgo4MTZJA1mPSAOAOmGDgyNIaXOgTiJ5ZIVTZXEkAWxpoiDCcjphY4MUY8JN9GQixAJpUDyfKYEp4wc4d2hlQxH1VsMEc28AZnR3YXJlQWeLYCz+Yi+VF3NhdlsXAGM4MDQ2YTY0AC1iZDM3LWQwBDRlQBc0OS05NQA4Zjc2N2I5NoRhYVQXOFQwNEtjB18XUHqDBmNoYW5nGmXg0C+fGZYZNzc4AGQxZDFjLTRkAGJjLWY5NDgtBDk0wGQ5NTJhNfBhZThjoBqOGfV8nxkDnxmYGWNvbnZlciEIS3BhcmFg6WVyAHM9ImZyb20gQGFwcGxpY/I1Lxh2bmQUVCY5IHRvDiAHSH8GdAZkZXJp92gTWQYmCCD/Bv8G/wb/Bv9PGk8a/1D/UE8aTxpPGk8a108aTxpEGi9nQC8dQsRZ/ZMURrESonfvDT8oPyg0KL/xA8Bdj1m/RL9E9ANvD17/fwR/BHcEhg+4kiUBAJiyEKeln8AAxqNlbnATcqChALLOPG8AAEfQAElEQVR4nO2dAH+8XmVx4L/DAK8iERtNcVlRAHothWIpGEulAPgJpbEoYnGpABCKoogiFn+xAFDEoiBKcUGEAAUpFKpSkZUVAFFqROmy0igrAKWlsLSsKTRLABqXNsWNprDoAF3TaJY0zP5xAJ4LN8n98Z5zAOaceZ73zPfzAMmH5N73zAz3AL7zzjPPM8+MAKgqQRCMPyKyABQ4ETgUOGiOAJdOAuuBW4CbAFV1dde2BTMjACJ7AFcCBwCLAGs8ug5YBXxYAFXv78C0IMiOAPAXPyK+'
    $Base64String &= 'BH0jAJHABMF4IyJHAAFnAa8Adq/5APhG4IvAR1X1AFFr24LZSb+3AK8biDpTVa82AJATzIKI7AocAAMcCewLPJ/KANc2At8BVgLfAAZuV9VNTmaOADXhLz5EfAm8AIgEJgjGGBH5ABBwkYGox4HTAFX1FgNZwRykAMXwZ6l2M61YAAO8QVVXGsocADwicgjwQeDYABqP3Um1YLu7ABurhkX4ix8RAF/GAxFZSHViAPkSqiR0C9VJANk6YLWqrnUyAG1OxiKBEZG9AIGXA3tS7XxBAHVE+SBwv6puAPayLQi8EJGvAFBvYTUKN6jqANuNZQYJEdkTAPgacEgH4jcAAMeq6p0dyB4UACJyEHAVsLSFAJj7qXb77zMxAGqAhL/4EfGlAGyS75wMnAbsADPPyx+hWk9/AFhVV3Vt26gUAJvAiMgxVD/8AKOBXed46RZgADVwHXCtqm7pAMG8YB5KzfhLAEBEdgduBY7oAEjFTcBbw5dsAEk+8efMXT/eAJYngDep6ooOAHWMNSJyFvAREGChkchAEFojWQCDIfzFh4gvZQCT7oldTrV+bgDCzcDHVfVBOwCrmlFcAiMipwAA7wUObijiYgBVPd/QpGBExgAh4y8BEfkW7UB2hkch/MggFQwAcGoPqu4G3hMAflUfEbkKOKMAA9Gx81yT8BcAHyK+lIuInAgAfMFI3PtV9QoAI1mNKCaBSVkA4zXACQbi1gAAvxM1yP0wThkAf+50uMCaieMAVXV5T7rGGhEAORX4TI8qr1Ug1dN71FcAGSlwgE6HKiKJGZElBQD8LfanlXcA74BQ1XXGckeisB0A1Rt/hfl37esA8gFVvcxYZjAAjXHL+HNGRBYAU3U66os1wK8AqOqGHnWOHSIAsh/V59sBPaoA3Qi8PS7NjoYAiJxBdeela86AV9WLe9BTLMIiACkXEfkbmlctAM3HCqoTykc6AJI/Kzv0rbAuAKnLy59jn7wAAFwqIpd3IDfgAOmM'
    $Base64String &= '3yp5AbhcAES+LiJ7GcocACeu6VnffsDgAHclDTiZfhdjAAALgBNEZOeeQPUWh4gcTmAGDwAuTG1pg9kJfwDxIeJLgYjI1wDoLnmBqnX8pQAisqhDHTOSdQHgFhPAn2B3WXIAJs4Wkfd2KH8AkKSMv4vLlUcAAZ8VkS4S2mIASYueJQ6qzxAAkQUOeseClIwAd3UZdj6WAa8AdNJdBOm9fQYA0Fdw3hF4f2oADRxsQ/iLDxEAX8pERD5GNZ8AqmuWUc0C6pUAbBOY9Kb9GrAAdw/qrhGRI3sA0DMIxjnjzxgAr52qPennA3IAXFlCNbnaU38AMDtHUQXnPjlAgqrRSbA9YxGMALSmPbdHlWenANPq3sg2gQHOAKbb9ojbYlnqADRYxj3jz5HUANayizkIo9K0ADlD4Pt7A1gSBDuccD47YtM0pgAJ1vM1xoXwlwCeifhSLH1XFgDtCryrT4VZJgAwyWEu7FntogC0+A4aMoSMPwBTXgHs4ajfqwCko2hSmdC+zgBmHEG1yxlszwDB+CUwL4+7MABbE/7iRsSXwgAQkaOB1zqoPgAx3VvvhSwTGAD66fYyE+dG7QBxK8Y+48+UvgAvtG7LzqlVdgBQj0XkUR4RpQCYM3Ogo+4F+BCfNuRGYxFjGeAA1XDijX0pyi4AgUnHs6c4mnAAtqPuYhlKxp8AKTk0NHixtwEABZJLKUosDmYApst7fKPgvXAAzP8/jfAXHyK+FES6G+y5Jjqyr2592SUwwOud9UftcTMGkfFnykJvA4DneRtQILm0ZI1T521I91/2czZjz1ROHVSEv/iw0NsAIr7U4QB8Nz8OoKeEM8cExjuBOCha9NZjSBl/MCs7ehsQNGaztwEZsjP+tfeHA89xtiHYnvCX/on4Mjre98QAfq4PJTkmMEud9e8M7O9sQ2kMJuPPlElvA4CYllyfjd4GJHKxIydyWTDlUjaVA7m8T3Oxoy8mvQ0g4ksdcrijNdgTmBx++N6l'
    $Base64String &= 'A6UxmIw/U/7R2wDgEW8DCmQDcI+3EcTiICiD8BcfIr6URQ7VKL2UvmaVwIhIH0MrR+FF3gYURg5J55BPYP7B2wBVXedtQ2mo6hPA/c5mPAg86mxDjjwJ3Odsw/3AJmcbsiH8xY2IL2WRQ4njZB9KskpgyOdyXBzb12MwGX+mfB14wlH/nY66S2ets/4HVHW9sw3ZoaqbgYedzXhcVYe2WJ6Ptc76h+gvEV/KIocSx8f7UJJbApPDDx5i16sug8n4c0RVNwEPOJpwk6Pu0rkH3x3dbzjqzp2HnPWvcdafI+EvPRPxpTh6SR7m4bE+lOSWwEx6G5BY621AYeSQeObgtJ7c6KR3M3Czk+7iUdUH8NthXAnc7aS7BDwXbeCfQGVH+IsbEV/K4QF8k/yN9PTZmVUCo6o5LIQhEpi65JA89JLx54qq3gSsdlD9ybRDFzTni/hs3nw+asvn5Nv43YNZxXAXy/MR/tIzEV/KQVUfAb7jaMKKvn5nWSUwCe9LepCHDSUxmIw/cy7oWd964IqedY4dqrqC/nc47wT+U886i0JVNwBfdlJ/W1qIBNsQ/uJGxJdyWOGo+4t9KcoxgfGud1wz1F2Wpgwp488ZVb0FuKFHlWfGJWMzrqC/jZMngCtTV6dgbm6nKh3qk9XA8p51lkb4S89EfCmK5fhUEj1Ij8lTJDDbc52z/lIZRMZfAO+jn9Ooy1JACwxIgfrjVLuOXXOJqt7eg57iUdXVwGd6Vvv5dNcjmIXwFzcivhRA2lT2WEt/SlUn+1ImqtqXrpERkS8BJzio3gL8dEZ3cYpBRPYBvglM9Kz6QeDX+3Sa3Em/iy8Ah3Sk4lbgLeEn9ojICVS/u64mwZ+nqpd0JHssEZFdqZKYN/eg7jbgpFS+FsxD+Ev/RHwpg/S59TfAAT2pXAEc3+dnV44nMABnOun9VDhNM4aS8ZdA+l0cR1X+Ys0lwFvDT7oh7Tr+JlVibs3bYzFWn1Seeh7dd79aB/xe'
    $Base64String &= 'JC+jE/7SPxFfyiB9bp1OPw0v1lOdmvX62ZVlApMGRfV9fPgglfMEzbmIqntOX6wAPt+jvmJI97jeAFxsJHI91c7webHA6pZ0Sfm3sLsHsZLqlLLP+vWxIpUsvY/uOoOtAn5TVWP2S03CX/on4ksZqOpdwDupqou6YjPVSWXv7c2zTGAS76HfQV4fjsv77RhCxl8SqrpRVc8Hfh24o4WoG4BXpVaaQQ+o6lpVPR44iXZTsD+qqi9T1WjJ2xJVfRB4K/Y7z3cAxyX5QQPCX/on4ksZpFPKt9BNEjNJdWLmkuxneQdmChE5GPgasFfHqi5OjhgY0ENd8mbgnbFDVo/kT8dS1fJPzPPyNVQNLZar6tpuLQvmQ0SWAO8GjgYWzvPy24Gr08500AEicjZwuYGo96nqlQZygmmEv/RPxJe8SXeX/gzYx0jkA8D5qtomeW1F1gkMgIgcCtzboYprVfX0DuUPEhE5EfjP2Ccxk8B7VDWm87ZARPYAXgbsD+yevjxJNf37XlXd7GRaMA8isghYTLWxswDYBDwCPKyqOQyVHQQisjtV2ewZDR6/Grgg7u91T/hL/0R8yZN0sf9sqpk+O7cQdQlVdz7XCpjsExh4Oon5ErC3sejzVdWqhjPYhnHM+IMgCLZFRE4GTgEOBXad4SVPUM1luJFq06zLmvQgCIJZEZEFVInM+dRLZG6kOjXOYiZSEQkMgIgsBq4BlhiIm6TqMHKrgaxgDsYt4w+CIJgPEdmTKpHZDPwoPreCIMgRETmEamzJEuAFwHOpPrsmqZqL3EtV6pfdbKpiEpgpUu3xWTS/F3ML8I4IKP0yLhl/jojIXsDJVB9AB1PVfE9StWVdBzye/vsY8D3g++lrTwAb4zg/CIIgmImIL0GuFJfATCEipwCnUR3Zz8fjVIPIrosLY/6UnPHnRKrtPif9acpmngk+U4FoHfBd4FFgXZpGHnRMOq2cAF5CVTu+APgh1aJgI9WCYBLYkP69CXgy'
    $Base64String &= 'FgjBEAl/6ZaIL0HuFJvATJF29hdTTYXdE1hE9UG1DlgNPJB6+AfB2CAiBwGfo3rvd83twPXAbVG7b09aiJ1Atct5RM3Hb6daqD1BtUB4jGpxsBZ4LC6J25JKwxalP7tTtSadpPrZb0r/3hgn/N0R/tI9EV+CEig+gQmCoZGaI3yBKmnvk+up5iTEhoARIjJB1cnqzR2Iv5NqxsIXY2HQnPQ7WgK8lurEf76mJPdRtYl9kGoo4j1pRlbQkvCX7on4EpRCJDBBUBgichXNWrdasAL4nQgy7RGRA4BLqWZVdMktwAeifLYeIrIQOBF4F3BQC1HLgVvSQLmgIeEv/RDxpXxSG+vnArulLz1FdTq8I/UHWm7mmfLL9WZGGhAJTBAURIfzdepwI1UjjKglb0gqff0sVSlMH9xFNfx1TU/6iibd0/sQcIyRyC1UfvPx+B3UJ/ylHyK+lEvacHktVVnlPsBSYxUPUCWY2dxPjgQmMGEoGb8n6Wf8dapOMN68IXaUmyMiZwGf6FntXcAxcT9jbtIU988z/zTxJqwE3q2q93Uge2wJf+meiC/lIiLLqJpaHdmDurVUp8qXeg+CLS6BEZGdgRdTXaDcEXgS+HH69qb07y1Ui+Bo4dchQ8z4PXEK4rNxP3BY+Fd90iXkb1N1Tuqb96vqFQ56iyAlL1/AfmjydNYAx6nqqg51jA3hL/0Q8aVMROS9wOXMPEC3S5ZT+cfanvU+TREJTDo+XgocDhzA6DWwK6hOAp6kSm6m/kzt8P+QZ1r3/sWQL+7VZagZvxcpiH+L0dqG98VhqnqPtxGlISJHAN90Ur8KeFWcbM6MiHybfjov3a+qv9qDnuIJf+meiC9lIiLHUd3Z8ir5W05V7jfpoXwnD6WjkhKXdwHH08yx6iyu7xSR6+LYcn4cMv4JqiGYEyLimvE7chB5BReoLjhHgKlP15eQ52JqA+h6RxuyREQ+RD/JC8AhIvIxVT2vJ30lE/7SPRFfyuQs'
    $Base64String &= 'fO8rLaPq3He7h/IdPJSOgoicA/wPqoVyH451BPBpEflYD7qKJWX8V9H/cSVUznJ5Kl0bGku9DZiBZWnnLqiHd435Emf92ZHexxf1rPbctEkXzE34S/cs9TZgBiK+zEGqgjnM2w7gFV6Ks0tgROTodIx/KbBfz+oXUgWVvgNZSeSQ8Q8hoGzLK70NmIE9mX8mRrA9CweuP0eucdJ7qZPeklg4cP19EPGlPM71NiCxr5firBIYEfk0cDP9HePPxgdF5ChnG7IjMn4fUneYl3vbMQsHeBtQIHs56/fcgMiVU530vtdJb0mEv3RIxJfyEJE34n8yOcWeIrK7h+IsEhgRmRCRf6K6FO7yg9iGHYELvI3IkMFn/E4cAizyNmIWhva7aEUqifD+XUZZxjREZLGzfu8FeraEv/RCxJfyONvbgGkcjtNJmXsCIyLHULWV7LJtZRMOTi01AyLjd2axtwFzkGvgy5UcPufGeke5Ad6fa0c468+Z8JfuWextwBxEfJmZ/+VtwDa82EOpawIjIucCXwN29rRjFnam6oIRVETG78frvA2Yg6e8DSiM53kbQJ6ft554JzAHOevPmfCX7on4UhAi8hq6GbLbhhd5KHVJYERkdxH5DJB7x69Xx/H+00TG70CqTz7Q2445iNlJ9chhR3mXNBA4qPBeJD3prD9nwl86JOJLkZxBfi2vPYbM9p/AiMjewOfxuzRZh/2AN3ob4U1k/K4cAuTcajUCTD1yODk8lPGv6y+Jjd4GZEz4S7dEfCmIdOXiud52zMCeItJ7qWWvCYyI7AN8FjimT70tGVTHq1mIjN8PzyFugT05LMgg70VL33jfBf2Bs/6cCX/plogvhZBOAX+bPNekx+LQLbC3D+6UvFxFeRcWl3h3qfEkMn53XuttwDzs4m1AYUx4G5AY1x3lJni/h9c768+ZCW8DEuPqLxFfyuFi4CRvI+bgBX0r7CWBEZH9gc9QZra/J1V2OTgi48+CCW8D5mFc'
    $Base64String &= 'A3tX7OFtQCIWBs/g/R5+zFl/zoS/dMuEtwHz4O2bWZDWYm/ztmMeer+X3HkCIyIHAJ8Dlnatq0OWDqxt7xSR8TsiInt62zACY3m5tUNyKYnZzduAjPB+D08668+Z8JeOiPhSFDeTTzI/G72X9XeawEy7sH9Il3p64PD0ZzBExp8FuQTvuVjobUBh5FJLP647yk14jrP+R53150z4S3dEfCmH3Ev9wOH91FkCIyL7AV8h7yFJdTjS24CeiYzfn4XeBozA870NKIXMWrJHacYzuLYxVtUNnvpzJfylcxZ6GzACg48vIvJxyjgB3KfvU71OEphUNvYl/AeEWXJUSsqGQmT8/njvDI/CWJfxGTPhbcA0xnFB1pQhNAMpkQlvA6Yxjv4S8aUMShmofig930s2T2BEZIKqVfJia9nO7Acs8TaiDyLjz4YS7l3ltEuaOxPeBkwjl9KcHFjoqHvSUXfuTHgbMI1x9JeIL5kjIm8CXuhtRw0m+lRmmsCktrafo/w7L7Pxam8DeiIy/jxY6G3ACIxjYO+KnE4MS9ig6AvPhVx0IJud8JduWehtwAgMPb68G/85VXXotazf+gfzh4z3ZffXichB3kZ0SWT8WVHEh7eI5H5XKhdySrbH8VJybdJ79ylHEx531J074S/dEvElY0TkQOCXve2oyWF9KjNLYETkbKpscZzZHfh33kZ0TGT8+VBK3fW4d4OzIqdyx2hPWvEsfMudn3DUnTvhL90S8SVv3kz9kz8F/rUDW0bl8D7L+k0Wqmla++UWsgrg+HGdCRMZf9CQkk7sPMnpdHosP8MasMVZ/6Sz/pwJfwlggPEljbFo0vn2anw7t+1GjwPrWycwqePYfzSwpRQWM753fCLjz4tSdmd7+8AqnIXeBkxjHEtimuC9C/2gs/6cWehtwDTG0V8ivuTLrwEva/Dc3+FfGniyiOzUh6JWCUzKEv+IqkPXkDjG2wBrIuPPko3eBozIL3kbENTGe+GeC947'
    $Base64String &= '63EHpgzG0V8ivuTLUQ2e2QzcjX+zqVcALxUR6VpR2xOYi8jrmLcvThWRvb2NMCYy/vwoZcDdL6UOhMEsZHgRdRwXZE3wvMAPsN5Zf5aEv/RCxJcMSVcUDm3w6IPAD4FlthbVZmfgbHrwmcYJjIgsA97bQvetVIOUrmwhw4sFwGneRhgTGX9+lHLEvxvwM/8/3kZkznO9DdgG702HXPBujxsJzMyEv3RPxJc8WUK1oVyX/0pV0v8aW3MacTTwc10raZTApGGVZ9HcqVcAv6uqGyh3Z+M0EVnkbYQFkfFnyzpvA2rwWm8DMsd7obwt49hVqQneFQQxB2Zmwl+6J+JLnjRtTHQnVfKTQzXKc4Df6HpTuXYCk47yzqH5VPoHgPep6qPp3wsbyvFmD+Bd3kYYERl/npQUYI4dwxMwS3JLrsdxQdaEV3oqV9U4gZmZ8JfuifiSGSKyAHh5g0f/EfgusNTUoHacTMcbEU1OYE6g+byXR4H3q+qqhs/nxgfGpANWZPwZoqolXfB9KWXND+qbf+ttwDaMY0lME3K7axFUhL90TMSXLDmQZs2UPkXVKe/1pta040A6bvBU6w0hIvsDZzTUtQG4QlXvavh8juwOvN/biDZExp89pQSZn2U8W41akdv7Mn5XFZ47694zaHIm/KUfIr7kxQENn/sGcDAwYWdKa36K6n5yZ9TNaE+g2V0JgOtU9eoZvu7ZgteCs0VkqbcRLYiMP2/WeBtQg4O8DQhG5lneBmSC5876pKPuoB7j6i8RX/KiyZ2826lm8R1sbIsFZ3VZFTNyAiMihwLnN9RzG3DuLN8bh/Z4n/Q2oAWR8efNQ94G1GDcOvNZktvn3E5Dak06B54JTCm73x7k9t4cV3+J+JIJIrIX1aD0unwr/ff1ZsbY8cvAL3QlvM4JzEU0O25/nOrS/uYGz5bC/iLyeW8jGhIZf96UtEP2W94GBCNzBLCXtxGepPJZz0GWj87/kiATxtVfIr7kw740'
    $Base64String &= 'O2X6anruxabW2LAD8OEuhc+LiJxC5cBNOElVH5nj++PS3ePNInKytxF1iIw/b0RkB6pEsRQWichPeRuRKTned3iBtwHO7IbvCUxJXaD6JvylYyK+ZEeT5OXPqVqxn2VsiyXHiUgnXQVHPYH5bEP5V6vqinleM07HsteIyH7eRtQgMv68EcprMz7Wx/xjRm7DAvvGu7PU95z1B/UYN3+J+JIXTdZiF1OVzb/M2BZLdqWy05x5ExgR+VJD2RtU9cx5ZO9Kfv3e27A78JVUmlACTRzmz4B/ZqAZf8/sQHm7fu/wNiBTnvI2YAb28TbAGe/PiO8768+Z8JfuifiSCSKykGbVMK8GXkX+LabfJyLm1VZz/k+LyOFUnceacMgIr9mVZr+0nDkA+Iq3ESPSJIE5j2r2yyAz/p4R4NlUw0JL4SAR8bxXkCs5lsTs7W2AM94bTT9w1p8z4S/dE/ElH/am2Z3izwL/ztiWrrjUWuB8WdsfN5R7haquHuF13jtgXXGkiFzubcRcNMz4nwReBJzDQDP+nhGqO2KlNSX4XW8DMiTHJibjMIS3Dd4L0n901p8z4S/dE/ElH17U4JlVwE9Tzp3fs0RkwlLgrItQEfkQ0OQ+x+OqOupwx1wHE70EeCHtOnScLSIXGtnTBU0y/r8D/gX4DXtzOsE843cg90RxJo4ds05wFmz0NmAG9hrT3cxR8d5A2+CsP2fCX/oh4kseNKmG+S9U1TAl/Sw+ZilsxjeviBwEXNBQ5vE1XpvrDvkuqrqO9mVIHxGRyzO9j9Ek4/8GzYZeemGe8feMbvPfUjgIeKm3EZmR44LsNxi/wa918F6MPuGsP2fCX7on4ks+NJnHdz9VAlMSJ4jIMiths2Xfl9IsubhRVe+u8fpcO5A9CaCqNwJXtpR1NnCpiOR2/Nwk4/9b4JXWhnSMacbfM0qVaJa0wwKVXxfVUrwHclyQwfiVxdRhkbP+SGBmJ/yleyK+ZEDa4G5y/+Ue4DeN'
    $Base64String &= 'zemaHak2lk3uH26XwIjIu4GjGsh6Arik5jM5nkwA/Hja3/8AuK+lvDOoWizn1MWkbsb/v6kunb6kA1u6xDTj75mngJ/3NqIhR3sbkBmbvA2YhXEczjcqCz2Vj/lw57aEv3RPxJc8WATsX/OZHwI/Rb5r6LlYQrWx35qtEpg02PCchrIuGfHi/nRy/eH/aOovqvooVTnd+pYylwFfEhF3x2uY8d9GNSTy2fYWdYppxt8nqroF+BlvO6bxf2u8dj8ReVNnlpRHrovVcdpRrotnCVmcvsxN+EvHRHzJhiYb24/Q7I66JS+hev/c2+DZU0WkSdncVmx7AvMhYKKBnBXA9Q2e263BM32w1e5PGsZ5Ae0/VA8GPi8iZ7SU05YmGf89wDEd2NIHZhl/n2R4YfSHNV//hk6sKJNJbwNmYZxq+uviuakRF/jnZtLbgFkYG3+J+JINL2/wzAb8GzBsVtUngLsaPLs3BrMEn/4BiMiRNKsr3Axcq6qTDZ7N9QRmu/s/qnodYNFVbCFwlYh8KZ14eVA345+k2h1pcm/GEveMv2dyOzV6nHpJ/BFpllSQb03/C8eg3XhTPP1rraPuEgh/6Z6IL3nQZKbevcBrrA2pydSspi8CdauvAE4WkaZzJoGUwIjIIqpsqMkb+kZVva2h/hzbKG9h9vrby4CrjfScAPw3ETnVSF4d6mb8D1MlDt4nZu4Zf8/kFmB+QL1SygXA67sxpThyLYl5K/6X2b3w3IGuu9s8NMJfuifiSx4c2OCZ/4PzHT5SEy5VfRC4ocHzOwNntGlwNXUC8zaaXdxfQ7sFfY4nMJtmu1yZvv4+4FojXfsBnxGRr4lIn0PV6mb8fwH8fReG1MQ94++Z3Lr0bQAeqPnMMQWefJmT6s1zZaG3AU48x1H3pKPu7Al/6YWIL86IyB40uwPzEHCYsTl1mX5Keh3VNYO6LAHe3NSAHdJE9tc1fP7qlH01Jcej2Dl3ftIH61lUpzFWHAP8iYg0'
    $Base64String &= '/kXWpG7G/4/ksSPmnvH3TG6deH4AfItnEslR2AdY2ok1BSEi3vXKc5HTRd4+8dxAe8RRd/aEv/RCxBd/9qP+SdizVfWbNLuvbsnTa8J0heRqmr2nzhCRxU0M2AFYTLM3wO00u7g/nRxLyOZdqKvqZlX9APXbRs/FIcAnRaTJSdjINMz41+I/9A0yyPh7Jrc68MeBv6T+BeTSZgd1wfPId2Dcz3ob4ITnBto/OOougfCX7on44k/d06MtqrpRRHYks/Wzqt4C3NTg0b2BdzTRuQPN6jk3AFeqatsMPscSsidHfaGqngecZKh7d+DKlGR0Rd2M/0fAN1T1rm7MqYV7xt8zuQWYnwDfof7ia2GGHW96Q0QE+CVvO+bg57wN6JvUSt4z/kQb5VkIf+mNiC/+LK75+ofSf3M4BZzppOwSmnVYPE1Eane53YEq663LZ1T1zgbPbUuOCUwtp1bVm4BXYFditT/NprKOSt2M/2FV3SIinvXiM+KR8feJwQZBF/wL8NcNnsvx/6UvdgaOIN+J1+M0nG9UFtCs9tyKkTfKBkj4Sw9EfMmCQ2q+fqrq5FXWhjRguzWvqj5Cs269O9OgC/IOVBfx76/xzBrgirqKZiHHBKa2I6jqfaq6C2CR1EG37YoX13z9VEL3i8Z2NME943cgpw/mp1RVqQJMnQXY+oFPHX8eeddp7ztGrWFHxbsD04+d9edM+Et/RHxxIg3XrrtZPZXAeCfRjzDLe0dVr6DKE+ryehGptfbdQVXXA1+t8czHVXVdLbNmJ8cPgcaOoKqvAi42sKFOK8G61M34H07/9dytnMI943dgrbcB09gEoKrXA/+9xnO3d2NO/qRymJ/Df2ryXPwG49NZaVQWOun9B2AZsMpJf9aEv/TOWm8DpjG0+NIkCZn63PDe/N88T6fAtzSQuSM1GxNMdfq4gdEuRN+kqk26P81GVpeQEq0yeVU9H/gV4L6GIh6hI4eMjH87amf8Dqz1NmAa0zsD'
    $Base64String &= 'XQ6MspFxs6re3JE9JSBUA1h/2tuQeRibCeMj4rUA2AX4e1XN7f5BLoS/9MtabwOmMbT4UnceHzyTwHi3GZ9Tv6reT7NOsbXYISlbTzWgafkshm2gKht7t7H+HE9gJtsKUNUHqDpjnE/9I9rr07DGLoiMf2tqZ/wOfNvbgGk8XaqXhteeydzzeG4FzuvaqMwRqjtXOX7WTWehtwE9s9BJb+4Lc2/CX/ol4osfdefxrZ+2Bsqp9G82fod6d8o3UnO+305Tf0mlOMeLyDLgSKrL5FCdJNySFuXWeC+KZ+InFkLSBbmLRWQlVSJz6AiP3ayqlq2Zt2WsM34RuQE4pSd7+qLJhcau2Op0UlWXi8gjwIlUJ3tHUN2n+y6wgur93OR+0jghVAMTc72QPEVuQ+26xqtr0e5UJwxRQjYz4S/9EvHFj31rvv7eaX/3/v+edz2Ymj/9DvCFEWXeoaq1Kml22vYLqrqc6iSmD7wvUs6E6eVKVb1dRB6gSmJOZfakrY/dhCFk/Ccw+vuqdsbvQJtBsdZsN1xOVVcCK1Nb2gmqk7IY0vcMgv9u8uYRbLC611gKnl0VDwC+7Kg/Z8Jf+iXiix9ra75++tUC7zbsI121UNWbReQA4EPzvHQlcGVdI7yn3Xrv6s/Ej6wFqup6VT0dOBa4ma0XzbcA7wfeoKprrXVvw9hn/FRJzKjUzvj7Jn1YP+ptR2LWJFZVN6nq6jEKLpZ47yZfydylIreTz3usLzznRngv0HMn/KUnIr64cmvN109PYL5raUgDRl67p3vhZzL7qfMdwJmqWnsw+XYnMD3jvSieic5sUtU7gDtEZH+qk5hNwHd7vNC5tubrI+PPg/9JVRcelMmEo+5Jqlbj3wK+PsP31wOfLLENaUs8T///yVF3CUw46p5keP4S8cUBVb1LRFYx2my+O9Jd9Sm8N16fqvNiVb1aRO6gGuOxP9Udsieo1mF3Ny0F9E5gHnPWPxPmJzDboqpeZUu3AmfU'
    $Base64String &= 'eH2xGb+IPAacxswfDncAlzTJ+J24FTjK2wjshrUOCQUW4bervFFVJ0Xk+zN873HgIlUttQ1pGxY66d2C/+IjZ8Jf+ifiix/voSon3WOO16wFzpr+hfQencT3c6wWqdrF9LPPO4Hx3tWfiRLuejQiMv72Gb8TK70NSAwxwFjwLEfda9N/n73N128Bri4oibfGq4TsSeCfnXSXQvhLv6z0NiAxuPiiqneLyIlU1whmSiKn3nczbXrfht8suyzW7t4JzENUP4hFznZMx/ukoWsi4y+Ph6m6r9QdQhr48xTwU4761wCo6j0i8qtUjSvWd9iqvRS8Yo7ie/8md8Jf+ifiiyOqeqeI3AMcDhwIPBf4PlVied8c4yNW4JfATDrp3QrXBCa1vn2EvBKYtd4GdElk/OWhqhvSaZJ3gMmx6UbWqOpTIrKbowlPX3pNw8WCCq9BhDsBLySv9rXZEP7SPxFf/EljN1akP6PieRqYxXrMuwsZ5PdBPg479nOiqndSdUR7DVUiczFwOnAY8KY5jsnrOJc1k466c+BObwMYcIBpiecGzaSj7iwRkQXAnk7qdwF+0Ul3KYS/9E/El8JIXWtvclK/fv6XdI93CRnAZ4C3kcdMmC2qOultRB9Exl8cD1D9/Jc42hABphmeO/8/yvc56s6VfXlmULMHJsOSx5jwl/6J+FImNwNvdtCbRQLjfgKTBhV57uxPJ/ehhq5Exu9HarXt9bMPGiIic90164OxbUrSAu+WsXEHZhbCX3yI+FIs9+Gzbs1ikKt7ApO4wtuARA7HqLlzs5PeQScwiW9RXSr1olYnuACAlzjrn3TWnyPei+Rfc9afM+EvfkR8KYzUXMJjnl0WFTFZJDDpzsV13nZQfzLqEBl0xu9JaqzwKUcTnnTUXSrei+UDnfXnyIud9R8hIhPONuRK+IsTEV+K5TZmn3LfFZM965uRLBKYxEcB79kcf+GsP3uGnvFnwDe9DQhqMeGs/3Bn/TnyAm8D'
    $Base64String &= 'gBO9DciUCWf9Q/eXiC+Fkeb1Xdajykmqoa7uZJPAqOo64N34LVTXzNFvO9iawWb8GXAXsNxJdxzx12cfZ/2vcNafI953YABO8zYgU8JffLmLiC8lcif9NVnamO5MuZNNAgOgqjcBFzipv95Jb3EMOeP3JnWPu81JfST49fEuV1rsrD8rRGQR/mVKABMisp+3ERkS/uJIxJcySQcAfTVhyKYaJqsEBkBVr6WaTdI3n3TQWTKDzPgz4U6qtpd9EwGmPhPO+hfGfYut2BM4yNuIxO96G5AhE876w18ivpTKrfSzJstmMzm7BAZAVa8AzutR5WpV9b5/UxRDzfhzIP3sPXbJ4oi/Pl4DE6fjOfMkN17kbcA0TvE2IEPCX5yJ+FImqTKmjzVZNuuxLBMYAFW9BPhAT+rO70nPuDG4jD8jlgNre9YZO2Q1SOVKC73tAI70NiAj/q23AdPYVUTid5MIf8mKiC9l8mXg7o51ZLPZn20CA6Cql9FPEnNXDzrGjiFm/Lmgqqvov+335p71lU4Ody0ADvA2ICOsLom/FJsL32cZyBgXwl8yIeJLmajq48BXO1bzk47lj0zWCQz0lsS8t2P548ygMv7MWOFtQDAnOZTDQCzIpmO1SH5CVe+j/YDdo0RkRwuDxoDwl7yI+FIm19Dtmuw7HcquRfYJDDydxHywQxUXikjUIzdgaBl/ZnyDCDI5491RaYq9RCSXxaE3VgnMpvTfGw1kvc1AxjgQ/pIXEV8KRFU3021XXe1Qdi2KSGBERIBPAFd1qOazInJMh/LHmcFk/DmR5hZ90duOYFYmjORYBIzFBjKKJi1KLe7A3MEzc6muNpAXZWQVE0Zywl8MiPhSLqp6I92syZ4CdutAbiOKSGAAAX4K+Azwdx3q+ZqIHNyh/LFkSBl/htwCrPE2IpiRCSM5/2Ig45UGMkrn+cChBnKeHnqcOjatbinvABHZq71ZxTNhJCf8xY6IL+XyqQ5kZrUWyz6BSacv'
    $Base64String &= 'OwI7UdXI/rhjlX8TSUx9hpLx50aajxO7ZHliUYayhaqUoy1LDGSUjlVZ0Kpt/m0x1PdtBjJKJ/wlMyK+lIuq3ox9CeCOVEN4dzGW24jsExgqG3eiWsT+MnBgDzr/XEQW9qBn3Bj7jD9TriNaTefI8w1k/A1whYGcmPoOi4zkbLsjbXEP5mQDGaUT/pInEV/KxeKzaVsOBp7bgdzalJDAQJX1PQ84BnhWD/oWAH8rIgt60DU2DCHjz5FUxtJ1J7igPhYte68A/jvtW4k/T0RymUDvhdUF/u9N/0cqJ2vrf/uJyOEtZZRO+EuGRHwpF1W9ierOniUvAPY2ltmIrBOYVD4GlZ3Pxa6H/yjsDXxJRHbtUec4MNYZf8Zc1IOOrD8vciIN5dvZQNRfpgXyX7eUsyP9nF7njFX8mGlxbFFGdoaBjCIJf8meiC/lcqmxvF2APaatz90o5Q0jwF7Ac3rWezRwec86i2bcM/5cUdWVwD0dq4lBY6PzIqDt5ocC/5z+/s2WssBm8GLJWFyUv51nOpBN505gY0vZBw94wyz8JWMivpSLqt4F3GYocjPVZkMkMHOhqkr1Q9oZ+Fl8LnO/V0TOdtBbMmOb8WeORUvXuYgAMzoWi+V/UtWn0t//wkDeYHeUU5evCQNRq6c6kE1HVTdRdWxqwwRVmfQQCX/Jn4gv5XIlVYMLC3bimY0CV7JOYLbpQLbY0ZQPiMjRjvqLYpwz/pxR1VuYeXfYiv/Xoexxw+LE8IFpf19F+wA/ISIWZTolsgdVKWpbHpnjexbls8sMZJRI+EvmRHwpExHZkWrw7qb5XjsiuwM/mbZZ4EbWCcw0no9N8GnKHsBFItLnHZzSGcuMvwAu6VB21y3Mx4kXGci4d+ovqZ3pt1vK2xvfz1FPrFooPzrbN9LGTdtuTYcOdCZM+EsZRHwpj92A38CugulZwFuMZLUi9wRG0p9fBvZ1tmUxcG7syMzPOGf8uaOql2GXOE5nHTYD4oaC'
    $Base64String &= 'RUvYh7b597bzR5rwEgMZJWJ1h+6783y/7SnM3gyzjCz8pQAivhTJvweOw7aCZZmITBjKa0TuCcwUFtOTLTgVOMnbiAIY24y/EK7rQOZPiBrlOljsKD+wzb9vN5C5v4GMErFKYOZrz9v2HgxUzWOGRvhLOUR8KYt3YH+SOEEGs6tyT2CUavc9lwQG4CMiEkOu5mZsM/5C6OKy5Q+AOAEbnbY7yhtUddvF8uqWMsHmIntRpM5eFheybwUem+c13wYebKnnUBE5pKWM0gh/KYeIL4UgIr9Adx1cj03tz93IOoFJXcgOAF7qbcs0JoD/4G1E5oxtxl8Cqroam+A9nf8ZJXyjISILqQbvtuHhGb72KO3LMidaPl8iC7Epy/qeqs65S5y+v7ylnkXA0pYyiiH8pSwivhTFG6kaYXXBYuDNHckeiawTmMSx3gbMwAkiMtRuMXMy7hl/QXzeWN6fGcsbZyZo7wPf2fYLqrqB9nX9zxcRqwvtpWD1/ztXB7LpfNVA19EDum85QfhLaUR8KYO3diz/tSKyoGMds1JCAvN6bwNm4SMDCjB1GOuMvyA+ZSTnh1QzGv7KSN4QsOhWuHaWr69pKXcCuwV9KVhdxB41gVkD3N9S1+EMZ5Bi+Et5RHzJHBE5Dnhxx2qOwvG0OOsERkSWYLOb/xbgt2k/KXk6BwGnGcobF8Y64y+FVA/etpQFqsuVk6o6a/vYYDss7sjNtli26KzUdVDLjcVGctaO8qI01PKLBvqWGsgogfCXwoj4UgTv7knPK3vSsx1ZJzDAOUZy/kFVvwx81EjeFJcbyyuaIWT8hWFx2XJXAxlDw6Ll+0w1/WBTe+7dkr43RGQPwOJC/B2MfgIDcKeBztcm+8ed8JcyifiSKanhUV8nuEd4lVlmm8CkXXaLi5frSTtnqYe5xa7BFLuKyMWG8kpn7DP+klDVu9m+tWhddrGwZWBYDCKcbd7IfHNIRmFIgxL3xmbDY1Uajjgqa4AVLXUe'
    $Base64String &= 'ik3ylTvhLwUS8SVrTgP6qlRZjNPnVLYJDHC2kZyvq+r3pv37AmyOlac4Lw1uHDRDyfgL5D+3fH4X4LkWhgyBtGM+0VLMOqqNl5mY7et1GMKu/hQTRnJq3aVIZWQWc0jG+h5M+EvxRHzJjORTv9mz2iN61gfkncBYlI9tAW6a/gVVXUWVxFhNiQe4wlBWqQwi4y8JERFgZUsxuwAva2/NYNiH9jX931HV2aZdW9zjG9IdMqvA2mSn+W4DvUeIyDifAIS/FErEl2w5gf5HjxzsUe6aZQIjIidj86GxWlW3q0VW1eXYlpKdKSKD3UUYUsZfGIuousLNFtxHJU67Rsdi/tFci2WLjZfnGMjInjTAcomBqLto1s3qO1TDL9twKONdwhT+Ui4RXzJDRHYHTnJQvQT72X/zkmUCA3zaSM4Nc3zv/bSfmDyd3zOUVRqDyfhLIc3LuQibttYvaG/RYLDYTfz2HN/bRPud/d1SoBt39qPqFtmW+9NMkVqkOzN3Gegf50vk4S8FEvElW06i2vTwIBIYEbkcm84Uc7ayVNX1wO8b6JniFENZxTC0jL8g3k7VOvynDWTFDtkIpB3//Q1EbTeUb4pUKvN4S/mHMIy6c8/ysSnuM9BvMSclO8JfiibiS2akDV3POXkH930fPKsEJl3MPsNI3F2qum6uF6jqrcCfGunbU0RONZJVEoPK+AviHcDzjGQ930jOuHMANiVL881EeMxAxxB2lJcZyFhNuwRmFe3LlS3mpORI+Eu5RHzJjxOw8aemHEvPyWhWCQzwCcBquv11I77uPNrXcE7xTiM5RTDEjL8EROQQnln0iIHIKNUbDYuF5l3Mv2M8aaBnrBdk6eK7RTC/W1XrzH/ZilRG1raEad8xLZcNfymQiC/5ISL70N8Yi7l4UZ/KsklgRGQZcKKRuHXpdGVeVPXvgGuM9L5cRH7BSFYJDC7jL4SPGMvbNRLFkXi5gYy75+ioNMWcJ8sjstBARs5YnQrf'
    $Base64String &= 'byCj7V3LcS1hCn8pk4gv+fFuqhNNb3rtKJdFAiMiC4ELDUXWnRB7IfDPRrqt5tdkzVAz/txJd5KONhZ7CHblAmOJiOyMTQBZOcJrLDorjfsAudMNZKwDvmEg53vzv2Rexuqic/hLmUR8yY90Iva73nYker2vl0UCA3wMu+xxg6peVucBVf0h8Ckj/a82kpM7g8z4C+C0juRGAJ+bg4AjDeQ8PMJrNhvosSrVzQ4R2RtYaiDqTlWd737FKKwDtmvnX5O9DezIifCXMon4khFpI+BjtO8EZ8WBqTlHL7gnMCJyLNWFMCvObPKQqv4+8K8G+l8gIocZyMmWIWf8OSMiC4Bzve0YKBaDVe9htHKX2FGemzcaybnZQki6B9M2ERq3i/zhL4UR8SVLLiGvmXhH0uN9MdcERkT2p2plbLW7sQ64pcXzf2Bgwy7YBdDsGHrGnzknUA0XC/rH4s7F3SPOG7HYUXbfvOoQi5b267GZ4TLFd1s+b9FuOCfCX8oj4ktGpDL+HK8s9HZfz80p06WtS7EZNDbFh9NuVyNU1WoYpcXReK4MOuPPleRPOX6YjT0iMoHNjvKoM0OeNNA1lojIQdgs9m9VVYud+ynaXiSfSDvgxRP+Uh4RX7Lks94GzEJv95k8dxUuBI4xlPeAqt5gIMdiLswLRORnDeRkRWT8WXMqedxJGiKH0H7RvIbRu1VZtH1/ykBGjnzQSM71RnKmaNyKOXEw49MJK/ylPCK+ZEQa+H64ochvUVUPvdJA1l4GMkbCJYERkdOADxmLPS8jOQuAtxrIyY3BZ/w5krr4vdfbjgGz2EDGX6vqWgM5g0VEFmHTin+lqrYZXjkTaw1kjMu8jMUGMsJfeiLiS16IyInYbiRvBj6lqpux+Zzq7b5e7wmMiBxBdYfCkotVdYWFoDQX5n8ZiBqrMrLI+LPmDGxLMYMREZE9sfH1e2q81mI3eBxr+t9lJKfNPcrZeJTRWv7ORfEzr8JfiiTiSyaI'
    $Base64String &= 'yH7A54zFfl5Vpz7z1tF+btVEy+dHplenFJFDgauwvQj2OHCloTyAmwxkvMRARhZExp8vGc3jGSr7U5X3tKVt0AhsulluUtVLDORsRfqsa9uJbBxiSvhLQf8/RHzJhzSD50+xbem9Evjo1D/S59T6ljJ722jpLYERkQOo7r1Y11GerqpPGMv8Iu13bZ4jIpYnFi5Exp89H2EMdmYL5hUGMu7AZuL7YEnt+CcMRFnffZlO24v849CJLPylLCK+ZEBq4PE5bDdrNwOXzVCK+Z2WcidaPj8yvSQwqYbyQuzLqq6dthA2Q1VXAw+1FLMTcKCBOW5Exp83InI0sMzbjqGSOvMsNRB1f/KDoDm/ayTnciM5M9H2In/RZTzhL2UR8SUPUvLyH4FjjUVfo6ozzbp6rKXcvdK4jc7p6wTmIuwdYQVVUtQVFt3Inm0gw4XI+PMm/X7OoGoYEfiwPzabMvcayBgs6aTb4rR7RccXw9vK3rfwmVfhL4UQ8SUrPoF9Gd9dwIdn+V7bk+JF9NQxsfMERkQ+gn0Hi7XABar6uLHc6dxqIOPfGMjoncj4i+BkxqxRRIEsNZBxD6PPswhmxup+3gVGcmaj7QnMIso+bV5qICP8pR8ivmSAiFwInGYs9lHglDlmJrZNYKCnxkqdJjAicgr2pySTwHmq2vWH2EO0L23aI3VdKY3I+DMmXax8m7cdgUkHvVWqOmkgZ5CIyBLgaANRq3qIKWtpf5F/HwM7vAh/KYCIL3kgImdQ3UGyZAvwznlOmr9roKeXz6nOEhgRWQr8cQeiPzrLLr4pqcb2r1qKOQl4mYE5vREZfxGcis0k66Ah6X6YRVns3QYyhszZwI4Gci42kDEnaeH945Zi9jYwpXfCX4oi4oszIrKMbq5IfFhV75jnNespZKOlkwRGRA4GvoxNYJnOZapq3TJ5Lm43kPFSAxm9EBl//ojIYmzaxQbtWGIgYy1RDtMYETkEOMxA1BN9bIolVrV8vtRO'
    $Base64String &= 'ZOEvBRDxxR8ROZKqCmahsegbRmkRn7r6tt1oKbOELB0/fhrbWS8At6jqB4xlzsdfArOdGozKiywM6ZrI+PMndfE5l/GZyF0yJxjIeEBV296LGDLLsPGFru++TKftaXOpn3PhL5kT8cWflED+MfYnrbeq6ttrvH5tS329rHtNE5jkAH+GzaCq6dyjqm8wljkvqrqG6v+nDXuKSNbtLyPjL4ajsVkIBO15nYGMKIdpiIjsjU1J0hZVvdZAzqi0XYBbz1Hri/CX/In44ki6L/1p7JOXlap6XM1nvt9SZ5EnMF/CfodoLXC8scw6fLbl88eR8aT4yPjLIHWGO9fbjuBpn2m7SzkJ3NnamOHyZmxiTd+n+m0TmOJKyMJf8ifiiy+pPfrnsL97dDfwKw2eW9tSb1l3YETkj+hm6NHrVLVtN7A2rABubCkjy12zyPiL4l3Aod5GBIBNe/GVqtr2PsQgEZFF2OwUbwT6PH2B9guDqdOnkgh/yZ+IL758Gfu21eup1s9bGjzb9l7yoj5GW5gkMCLybuzb7kL1w3f90ErdyP5PSzE/n9ucksj4yyElmud72xE8jcXiOcphmrMMWGwg52pV3WQgpw5raH8P5hctDOmR8JeMifjii4h8GptW8NOZBF6pqhsaPt92Qxl62FRuncCIyLFU9yes+YCqWnQBs8CinfJLLAwxJDL+criIAc25yRkR2QubMp5vGcgYHCKyEDjRQNRm2p+s1yZtiD3RUkzWdyqnE/5SBBFfnBCRs7EfW7EBOF5VV7eQsdbAjs7LXVslMGmI2B8Cu9qY8zTXquplxjLbsAa4taWMbPqqR8ZfDqlV7KnedgRP83oDGY+o6l0GcobI0dhMdL+5ZYBvQ9uS6JLuwbzeQEb4S0dEfPFDRE4DLjcWuxk4S1Xb3hf7LtD2dLrzqpjGCYyIHABchf2i8TZVPd1YZitU9SHgsZZistg1i4y/OP7Q24BgKyx8Jy4jNyCdsJ5kJK7vuy/T'
    $Base64String &= 'aZs4WXf57JLwl7yJ+OJAGvT+6Q5En6+q17cVkoaOT7YU8+K2dsxHowQmXaK8nG7aJf+WsUwr2pYn7SUizzKxpCGR8ZeFiMRE5IxIbeItNiKWG8gYIkcARxnIWQ48aCCnKW07kRXxORf+kjcRX3xIlUtdlEReZly5lH3HxNoJTPpQ+g/YBJLpPAi8xlimJS9s+fxxwK9aGNKEyPjLQkR2B670tiPYijcayJhU1RUGcoaIRTcrgJscLu9Pp23ytCBtIuZO+EumRHzxIc0E/C8diL4B+0YMbUtds7zEfw72HcceBd6ZFrG58t8MZCw2kFGbyPiL5NPA7t5GBFvxfgMZ9xjIGBwicjA23azuxP9C+HcMZEwYyOia8Jd8ifjSM+naxVewb5hwC/C+1CDEkrUtn8/rDkwqQfqYsQ0bqZKX+4zlWvNlqrsebXiphSF1iIy/PNJizaLTUmBE2rFcbCDqFgMZQ+QEbAL/Lao6aSCnMaq6jirutSGLO5WzEf6SLxFf+ie1qv4c9ov6FVTr50ljuQD/2PL5zhPkkROY1C75GmP9m4AzVfUOY7nmqOojtN8N2iu9kXshMv5isWxL/idEnbMFrzSSE/X8NUmfYxblSHcDubTmX9vy+dwv8oe/5EvElx4RkT2oNnytfXY1cFKHGzJr2wroeujuSAlMytg/S/uL7Nticn+iRz4BfKPF868Gft3IljmJjL9M0inn4UbifgRcDTxlJG/IWJTN3p95mWyuHAVYBMLb0+lHDqxt+Xzu5bLhLxkS8aVf0sDwT2J/Z/xR4A2q+rix3Om0LekHONBAxqzMm8Cko+A/w34X/zpVvcJYZqeo6jeA/91SzBILW+YiMv4yEZEFwIVG4p4Cfg/4H0Bvp35jjIUv/ScDGYMiLQDOMhC1hrx289u2Uj7AxIruCH/JjIgvLlwDLOtA7nGq2nUnRYvkaD8DGbMyygnMvYB1x5MV2Fzw8+CfWz7faZlTZPzdZvwdcy52weBq'
    $Base64String &= '4Iuq+mOqVtdBQ0TkCGCPtnJU9ZMG5gyNk7G527Y8lQHnQltbsl00hr9kS8SXHhGRP6KbIaGHqeoDHcjdClV9gvZJTKefU3MmMCLyN9jv9DxIVYLU9kK8F99u+fyzReQwE0tmJjL+AkltUc8wEvd94AOq+qP07y1GcoeKxYXXRw1kDJFzDGSsB24ykGNJ2zgyVR2RI+EvmRHxpV9E5L3AOzoQ/Vuq2mdnvrYD3DttrDRrAiMiF2FfgvQE8B5VXWsst08epl0pwuHAy4xs2YrI+IGMdybnYSl2d3h+W1WfnPbvHY3kDpVXG8jwnPxeJCKyDJsT62+p6ioDOZasNJCRa9OS8Jf8WErEl15Id8YvxP7O+JmqepuxzPloe1Lc/x0YETkE+JCxrs1Uu/hF93VX1YeA77UUY95OOTL+pym1lbLVZsEtM/y+YoesISKyGJsL5FEOU5+LDGRsoCp3yYo0SLNt6U0nG2FtCH/Jlogv/XEK9tcuPqqqHp9ja1s+3+ldvdlOYD7Yga53qurdHcj1oG1W+vMi8ssmlhAZ/zaUegdmgZGcdxrJCSqON5DxSMElsy6IyKHYdNpakfGMsTUtn++8IUwDwl/yJOJLD6QmQocai71JVS8wljkqbddjnZ7ObZfAiMjOwOuM9VygqjcYy/SkbeD5dWw660wRGf8z5N6dZzbanjwBnDdLhzjrxHZILDWQ0fcmwDhwqZEc69lllrSNI9YLJQuWGsgIf7En4ks/LMT26sWtqnqSoby6tG58IiITBnbMyEwnMC/D9g15s6p+1FBeDtwLfKmljNdYGBIZ/3aUWo/btq3qg6p6ySzfK/Vn4koaoLjYQFRJs67cST93i1kVd6vqXQZyuuIfWj6f1SyY8JesifjSD7sZyroLeKuhvCZ810BGZ5vKMyUwzzOUf5+qvslQXhakXYi2Qxf3EJGF7a2JjH9busz4O+QOoM1F4zPn+F4EmGYcSfvSiydov3gYGp82kpP7RfC2'
    $Base64String &= 'nch2zKwTWfhLvkR86QeroZ4ryaNbb9t1LnTYbGSmBMbqB7aK6gNtXPl7AxmvMpARGf/2FFdGliZO39jw8Zvm2WmOS5bNsJiltFxV4+c/IiKyDzZ3O3IbXDkT3zGQ8WIDGVaEv2RKxJfeWEe7RBGqz65TVLVtiWlrUgLV9vfb2WiLmRKYB2mfxKyn6l7lnT12yQPAf20pw6LdZGT825Nre9H5uJb69d+rmb9bUwSYmojIXsBBBqJyX0TnxrlGcq4uYCH8sIGMLMrIwl+KIOJLx6jqOqpB7U15nKp50kobi0xoWxXzAhMrZmC7BCYtYO9tIXMDcGxmU4/NSe2U/29LMS80MCUy/u0pcphl2iV7J6MH8fuBd6jqfCUXVknukFhK+5lCW4Bx6bzYOSKyJ/A2A1HrgE8ZyOkUo80ii6TBgqWEv2RNxJfeWE5VClmXzVTJyx3G9rSl7UlxrycwABe3kPnOjNtWWvNPLZ9/flsDIuOfkc4y/q5R1fXAScBHmf3nsDp9/y0jzuiJHbL6WHzofjXN+whG40Rs6ukvKeD0ZYq2E+dzaRsf/lIAEV+6J/3Mmqyhz1LVm63tMaDtxnZnFTE7zfRFVb1bRK4Gzqgp732Z/gK64qGWz/+0iBxqkPAtB06mfivlnDP+NgGxyBOYKVIQv0BErqHqxrQf1eXYx6gSzoczSzjHEYvL0VEOU4+lBjI2UcDpyzQeot3gxyxKyAh/KYaIL92jqleKyB7A+5m/q+8WqnVYrk1H2m4o72pixQzMmMAAqOqZIrIAOHUEOZuBi1T1SjPLyuAbVKcfTZsV7Au8HGiVwKjqPSJyMfCJmo/mnPEf3eL5Uu/AbIWqPo5NUH+OgYyhsd5ARpuT0bl4siO53iw0kHFRQacv0H5xsJeJFe0JfymMiC/doqrnicg9VDP/jpjhJRuAbwK/r6oP9mpcPVp3BRSRPdPpnymzJjCJdwLforpYOVtnpwepBhzdbmlYCajq4yLStgRg'
    $Base64String &= 'XyNbIuN/hs4y/kKxCOBD+5k+3vL5u6lOA7pgXNuWtr4Toqptyp89uL/l8wtEZK9USuxJ+MtwifgyC2ldfLuI7E91X20vqp/XD4AHcrh3PAJrDWQswmaTYyvmTGDSTtZNIrKCatbIkVS/gB2pFpm3U/0SNlobVhBtu2b9jIkVRMY/na4y/kKx8M+h+fjXqS6DN93hvqXDz8VxXZD9qOXzV5hY0S8PGMjIYRJ6+MtwifgyD6kRQpHzjVT1ERFpK6aTpl7zncAATx813pH+BFtzF1Ui17Tk6Rt2pkTGP41OMv5C+XHL51cCk+3NKAdVXS8i1wMfafD4o8CfGps0nccMZHi3S5+JP6C6yN+U+dq95shaAxkWs7NaEf4yaCK+jD/XM9p1kpnY2FVzjtm6kAUjoqp/RTsHbuv8M6Kqq1X1FlW9UlWvVdWbC0leMGrBPdZtvGuynnYlHusH2h3oMpqV+HxcVduWls7FetotfFfTvvW6Oap6P8399mZVnTQ0pxeSX7XZaNmQ0Z2f8JdhEvFl/DmzxbOXmVmxDZHA2LAj1V2huijV7kOwPde3eLazjL9E0uLg1uCyABYi2jxbLKmkAOVN1FuUXaKqAJ/syCTg6VaoAG3mZazKeE7XAG82eOZRqvuaAKXSpvnNJWZWALQk/GWYRHwZAH+Sb7+v4bMfADU252kigTFAAFWXAd9r8OhVAKr699b2jAlZAGb8BXMTzS7JAN4H3GBsSzGkAIXLm6gS6sk5AF76CFUzk/P6ALALuJFmw9I2AACfMbbFjHRKAPxWRv9/W0c1AHus5BKfG6k6AHnWZRNwubEtAK0IfxksEV/GAJzUZbjuZsthAF3YMoWoapfyAAeDiFwEfKjGACN/q6qLOzJnACwQkbOo3xoaAFVtfeNsHBGRAI8AF9Z45BHgAO2qGtOxARFZAErVyOQVPDP3AGId1e7un3RcAAYzkz1XUX9WANe1qnp6F/ZYACIixwLnAIfOAPGy26l2'
    $Base64String &= '8EcZALaXNSJyKvBpAEa/cL6Zakr6AI3dWdWO8JdhABHxZRiIyNlUAN1u95zjZRuBAOO7njEYCYwhAOkX+zFgl3leABrJy4iIyCeoALqqjcph47CgAOkCEdmZasf2AN3M37loLdUOAGmOc4ICQEQWAFL9Pke9XHkjAPCekrpGisgpAFQDLvenWtxvAKS6k3AnsDyjAPsfrRGRc6guAMEvmOelk8D5ABm3wc+SIfiLACcRX4aDiBwEALwXOIqtB/HeAEfVmfeyPoahAEYCY4yI/BvgAFrg14DnUjnyAFPAv1LtOHxQAFVv87OwPHLKAPjHARE5ATiZAJk7562n2tm+ADrzVtsBVbtwAKrOXW+manU/ABP3ATcD15V8ADdMRHYcp4RlACZE5Cgq33wlANt/3q2j6nr5AMnYpGnGkPzFAIuIL0FfRALTACEi8jPA4cATAKr65972lEwuABn/uCAiuwKHAAAHAs+nGm66AA5YqaoWsymCACBoiIgcQrXAAN4L+AnVwu+hANSpLQiyJuJLANAH/x+ayQ3AIItfLmMAAABJRQBORK5CYII='
    $Base64String = _WinAPI_Base64Decode($Base64String)
    If @error Then Return SetError(1, 0, 0)
    Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']')
    DllStructSetData($tSource, 1, $Base64String)
    Local $tDecompress
    _WinAPI_LZNTDecompress($tSource, $tDecompress, 21136)
    If @error Then Return SetError(3, 0, 0)
    $tSource = 0
    Local Const $bString = Binary(DllStructGetData($tDecompress, 1))
    If $bSaveBinary Then
        Local Const $hFile = FileOpen($sSavePath & "\BlackStickMan.png", 18)
        If @error Then Return SetError(2, 0, $bString)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc   ;==>_Base64String

Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
EndFunc   ;==>_WinAPI_Base64Decode

Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize)
    $tOutput = DllStructCreate("byte[" & $iBufferSize & "]")
    If @error Then Return SetError(1, 0, 0)
    Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0)
    If @error Then Return SetError(2, 0, 0)
    If $aRet[0] Then Return SetError(3, $aRet[0], 0)
    Return $aRet[6]
EndFunc   ;==>_WinAPI_LZNTDecompress
#EndRegion

When you add more than 1 layeredwindow (by pressing alt+p) 1 the previous window doesn't update.
And things get more messy when other windows become focus.

I think the problem is in this part
 

$hDestDC = _WinAPI_GetDC($ObjectArray[$targ][1])
    $hScrDC = _WinAPI_CreateCompatibleDC($hDestDC)
    $hOld = _WinAPI_SelectObject($hScrDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tPTSrce = DllStructCreate($tagPOINT)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow( $ObjectArray[$targ][1], $hDestDC, 0, $tSize, $hScrDC, $tPTSrce, 0, $tBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hDestDC)
    _WinAPI_DeleteDC($hScrDC)
    _WinAPI_DeleteObject($hBitmap)

I dont really understand why handle for context seems changing even if its stored in array.


Problem Solve. I wanted to delete the Post because its only human error but i don't see delete button.
I realize that This line
 

$ObjectArray[0][1] = WinGetHandle($hGUI)

was missed look. And Realize it After next day, as I keep trying and Rebuilding my script Using GuiCtrlCreatePic.

The reason my error is missing up with other windows is because the value inside $objectArray[$targ][1] other than value $targ:0 is empty. and I assume it gets the reference to what current window is ontop.
Even though with all those ConsoleWrite, I still can't keep up with my own error.

Edited by senatin
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...